当前位置: 首页 > news >正文

网站开发就业前景分析手机网站导航设计

网站开发就业前景分析,手机网站导航设计,新手制作网页的方法,卫生网站建设方案从类别上分#xff0c;有两大类#xff1a;- 认证#xff1a;你是谁#xff1f;–识别用户身份。- 授权#xff1a;你能做什么#xff1f;–限制用户使用的功能。权限的控制级别从控制级别(模型)上分#xff1a;- URL级别-粗粒度- 方法级别-细粒度- 页面级别-自定义标签…从类别上分有两大类- 认证你是谁–识别用户身份。- 授权你能做什么–限制用户使用的功能。权限的控制级别从控制级别(模型)上分- URL级别-粗粒度- 方法级别-细粒度- 页面级别-自定义标签(显示)- 数据级别-最细化的(数据)URL级别的权限控制-粗粒度在web.xml中配置一个过滤器filter在过滤器中对请求的地址进行解析字符串截取url.substring()…把上下文前面的路径都截取掉剩下user_login.action。过滤器代码以通过查询数据库来判断当前登录用户是否可以访问user_login.action。url级别控制每次请求过程中只控制一次 相比方法级别权限控制 是粗粒度的 URL级别权限控制基于Filter实现。方法级别的权限控制-细粒度aop面向切面的编程在方法执行之前进行权限判断如果没有权限抛出异常终止方法的继续运行。自定义注解 在需要权限控制方法上 添加需要的权限信息代理 (Spring AOP )在目标方法运行时 进行增强 通过反射技术获取目标方法上注解中权限 查询数据库获取当前登陆用户具有权限进行比较。相比URL级别权限控制 可以控制到服务器端执行的每个方法一次请求中可以控制多次。页面(显示)级别的权限控制-自定义标签页面显示的权限控制通常是通过 自定义标签来实现数据级别的权限控制在每条数据上增加一个字段该字段记录了权限的值。数据和权限绑定。代码你在查询数据的时候需要去权限和用户对应表中通过当前登录用户的条件查询出你的数据权限。然后再将数据权限作为一个条件放到业务表中进行查询。从而限制了数据的访问。权限系统的数据表设计资源用户要访问的目标通常是服务中的程序或文件权限用户具有访问某资源的能力角色权限的集合为了方便给用户授权。用户访问系统的’人’。表对象实体- 用户(User)表访问系统的用户比如用户登录要用- 权限(Function)表:系统某个功能允许访问而对应的权限- 角色(Role)表角色是权限的集合(权限组)方便用户授权。表对象之间的关系- 用户和角色关系表一个用户对应N个角色一个角色可以授予N个用户—》多对多关系- 角色和权限关系表一个角色包含N个权限一个权限可以属于N个角色—》多对多关系完整的权限相关表URL级别权限控制包含资源表、权限表、角色表、用户表以及相关关系(都是多对多)共7张表。方法级别的权限控制包含功能权限、角色、用户以及相关关系(都是多对多)共5张表。但Apache Shiro框架支持的URL级别权限控制是将资源和资源权限对应关系配置到了配置文件中不需要表的支撑只需要5张表了。Apache Shiro权限控制Apache Shiro 可以不依赖任何技术使用 可以直接和web整合通常在企业中和Spring 结合使用。Authentication 认证 — 用户登录Authorization 授权 —- 功能权限管理通过引入Maven坐标导入shiro官方建议不推荐直接引入shiro-all依赖比较多原因怕有jar冲突。官方推荐根据需要单独导入jar。Shiro基本原理Shiro的框架的体系结构Shiro权限控制流程的原理应用代码 —- 调用Subject (shiro的Subject 就代表当前登陆用户) 控制权限 —- Subject 在shiro框架内部 调用 Shiro SecurityManager 安全管理器 —– 安全管理器调用 Realm (程序和安全数据连接器 )。Subject要进行任何操作都必须要调用安全管理器(对我们来说是自动的)。而安全管理器会调用指定的Realms对象来连接安全数据。Realms用来编写安全代码逻辑和访问安全数据是连接程序和安全数据的桥梁。URL级别的权限控制配置整合和url级别认证配置过滤器web.xml放在struts的前端控制器之前配置但放在openEntitymanage之后。shiroSecurityFilterorg.springframework.web.filter.DelegatingFilterProxytargetFilterLifecycletrueshiroSecurityFilter/*配置ApplicationContext.xml(shiro权限控制过滤器 shiro安全管理器)/login.jsp anon/validatecode.jsp anon/js/** anon/css/** anon/images/** anon/user_login.action* anon/page_base_staff.action anon/page_base_region.action perms[user]/page_base_subarea.action roles[operator]/** authc配置shiroFilter 其实是一个过滤器链含有10个Filter(校验功能)。常用认证- anon不用认证(登录)就能访问(单词注意大小写)- authc: 需要认证(登录)才能使用例如/admins/user/**authc没有参数。授权- perms需要拥有某权限才能使用如具体允许的权限/page_base_region.action perms[“user”]如果要访问该action当前登录用户必须拥有user名字的权限。- roles需要拥有某角色才能使用如具体允许的角色/page_base_subarea.action roles[“operator”]如果要访问该action当前用户必须拥有operator权限。用户认证(登录)—自定义RealmShiro实现登录逻辑用户输入用户名和密码 —- 应用程序调用Subject的login方法 —- Subject 调用SecurityManager的方法 —- SecurityManager 调用Realm的认证方法 —- 认证方法根据登录用户名查询密码 返回用户的密码 —- SecurityManager 比较用户输入的密码和真实密码是否一致 。编写Shiro的认证登录逻辑Action(valueuser_login,results{Result(nameSUCCESS,typeredirect,location/index.jsp),Result(nameLOGIN,location/login.jsp)})InputConfig(resultNamelogin)public String login() throws Exception {//shrio:登陆逻辑//获取认证对象的包装对象Subject subject SecurityUtils.getSubject();//获取一个认证的令牌://直接获取页面的用户和密码进行校验AuthenticationToken authenticationToken new UsernamePasswordToken(model.getUsername(),MD5Utils.md5(model.getPassword()));//认证过程try {// 如果成功就不抛出异常会自动将用户放入session的一个属性subject.login(authenticationToken);//成功,返回首页return SUCCESS;}catch(UnknownAccountException e){//用户名错误addActionError(getText(UserAction.usernamenotfound));//返回登陆页面return LOGIN;}catch (IncorrectCredentialsException e) {//密码错误addActionError(getText(UserAction.passwordinvalid));//返回登陆页面return LOGIN;}catch (AuthenticationException e) {//认证失败e.printStackTrace();//页面上进行提示addActionError(getText(UserAction.loginfail));//返回登陆页面return LOGIN;}}编写Realm给SecurityManager提供JdbcRealm和jndiLdapRealm直接连接jdbc或jndi或ldap。相当于dao和reaml整合了能直接读取数据库逻辑代码都实现好了。/*** 实现认证和授权功能*自定义的realm作用从数据库查询数据并返回数据库认证的信息*/Component(bosRealm)public class BosRealm extends AuthorizingRealm{//注入ehcache的缓存区域Value(BosShiroCache)//注入缓存具体对象的名字,该名字在ehcache.xml中配置的public void setSuperAuthenticationCacheName(String authenticationCacheName){super.setAuthenticationCacheName(authenticationCacheName);}//注入serviceAutowiredprivate UserService userService;//注入角色daoAutowiredprivate RoleDao roleDao;//注入功能的daoAutowiredprivate FunctionDao functionDao;//授权方法获取用户的权限信息//授权:回调方法//如果返回null说明没有权限shiro会自动跳到//如果不返回null根据配置/page_base_subarea.action roles[weihu]去自动匹配//给授权提供数据的Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {//给当前用户授权的权限(功能权限、角色)SimpleAuthorizationInfo authorizationInfo new SimpleAuthorizationInfo();//两种方式//方式1工具类来获取(首长-)// User user(User)SecurityUtils.getSubject().getPrincipal();//方式2通过参数获取首长(推荐)User user (User) principals.getPrimaryPrincipal();//实际需要根据当前用户的角色和功能权限来构建一个授权信息对象交给安全管理器if (user.getUsername().equals(admin)) {//如果是超级管理员//查询出所有的角色给认证信息对象List roleList roleDao.findAll();for (Role role : roleList) {authorizationInfo.addRole(role.getCode());}//查询出所有的功能权限给认证对象List functionList functionDao.findAll();for (Function function : functionList) {authorizationInfo.addStringPermission(function.getCode());}} else {//如果是普通用户List roleList roleDao.findByUsers(user);for (Role role : roleList) {authorizationInfo.addRole(role.getCode());//导航查询,获取某角色的拥有的功能权限Set functions role.getFunctions();for (Function function : functions) {authorizationInfo.addStringPermission(function.getCode());}}}return authorizationInfo;//将授权信息交给安全管理器接口。}//认证:回调认证管理器会将认证令牌放到这里(action层的令牌AuthenticationToken)//发现如果返回null抛出用户不存在的异常UnknownAccountExceptionOverrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {//用户名密码令牌(action传过来)UsernamePasswordToken upToken (UsernamePasswordToken) token;//调用业务层来查询(根据用户名来查询用户无需密码)User user userService.findByUsername(upToken.getUsername());//判断用户是否存在if (user null) {//用户不存在return null;//抛出异常} else {//用户名存在//参数1用户对象将来要放入session,数据库查询出来的用户//参数2凭证(密码)密码校验校验的动作交给shiro//参数3:当前使用的Realm在Spring容器中的名字(bean的名字自动在spring容器中寻找)SimpleAuthenticationInfo authenticationInfo new SimpleAuthenticationInfo(user, user.getPassword(), super.getName());return authenticationInfo;//密码校验失败会自动抛出IncorrectCredentialsException}}}ApplicatonContext.xml:用户认证(退出)以及修改密码/*** 用户退出登录*return*throws Exception*/Action(valueuser_logout,results{Result(nameLOGIN,typeredirect,location/login.jsp)})public String logout() throws Exception {//shiro退出Subject subject SecurityUtils.getSubject();subject.logout();//跳转登陆页面return LOGIN;}/*** 用户修改密码*return*throws Exception*/// Action(valueuser_editPassword,results{Result(nameJSON,typeJSON)})Action(user_editPassword)public String editPassword() throws Exception {//获取Principal就是获取当前用户User loginUser (User) SecurityUtils.getSubject().getPrincipal();model.setId(loginUser.getId());//页面结果HashMap resultMap new HashMap();try {//调用service进行修改密码userService.updateUserPassword(model);//修改成功resultMap.put(result, true);} catch (Exception e) {e.printStackTrace();//修改失败resultMap.put(result, false);}//将结果压入栈顶ActionContext.getContext().getValueStack().push(resultMap);//转换为jsonreturn JSON;}用户授权(授权)—自定义Ream数据库数据添加applicationContext.xml配置/login.jsp anon/validatecode.jsp anon/js/** anon/css/** anon/images/** anon/user_login.action anon/page_base_staff.action anon/page_base_region.action perms[region]/page_base_subarea.action roles[weihu]/page_qupai_noticebill_add.action perms[noticebill]/page_qupai_quickworkorder.action roles[kefu]/** authc12345678910111213141516代码在上面的BosRealm的中protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals)RoleDao省略。方法级别的权限控制启用Shiro注解需要 Shiro 的 Spring AOP 集成来扫描合适的注解类以及执行必要的安全逻辑。ApplicationContext.xmldepends-onlifecycleBeanPostProcessor12345678910111213141516在需要权限控制的目标方法上面使用shiro的注解RequiresAuthentication 需要用户登录subject.isAuthenticated() 必须返回true RequiresUsersubject.isAuthenticated() 返回true 或者subject.isRemembered() 返回true“Remember Me”服务:认证机制 基于 session被记忆机制 基于 cookie (subject.isAuthenticated() 返回 false ) RequiresGuest 与 RequiresUser 相反不能认证也不能被记忆。 RequiresRoles 需要角色RequiresPermissions 需要权限异常动态代理异常解决方案配置ApplicationContext.xml设置代理为cglib代理(对目标类代理)depends-onlifecycleBeanPostProcessor 123456方案二1类型转换异常解决方案递归向上寻找泛型的类型。//递归向上 查找Class actionClass this.getClass();//向父类递归寻找泛型while(true){//得到带有泛型的类型如BaseActionType type actionClass.getGenericSuperclass();if(type instanceof ParameterizedType){//转换为参数化类型ParameterizedType parameterizedType (ParameterizedType) type;//获取泛型的第一个参数的类型类如UserinfoClass modelClass (Class) parameterizedType.getActualTypeArguments()[0];//实例化模型对象try {modelmodelClass.newInstance();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}break;}//寻找父类actionClassactionClass.getSuperclass();}空指针异常解决方案1使用public 的Setter方法上的注解直接注入Service。SubareaAction//注入serviceprivate SubareaService subareaService;Autowiredpublic void setSubareaService(SubareaService subareaService) {this.subareaService subareaService;}解决方案2Autowire还放到私有声明上在struts.xml中覆盖常量(开启自动装配策略)值默认是falsestruts2默认注入采用的是构造器注入(从spring中寻找的bean)改成truestruts2会采用setter方法注入页面标签(实现页面内容定制显示)页面拿Session中的user对象 代表user对象。程序中拿Session中的user对象SecurityUtils.getSubject().getPrincipal()资源通配符和权限通配符可便捷开发。代码级别使用代码编程的方式直接在程序中使用Subject对象调用内部的一些API。(有代码侵入)//代码级别的权限控制(授权)功能权限和角色权限两套机制boolean判断异常判断//授权的权限控制//布尔值判断//功能权限if(subject.isPermitted(staff)){//必须拥有staff功能权限才能执行代码System.out.println(我是一段代码。。。。。);}//角色权限if(subject.hasRole(weihu)){//必须拥有staff功能权限才能执行代码System.out.println(我是一段代码。。。。。);}//异常判断//功能权限try {subject.checkPermission(staff);//有权限} catch (AuthorizationException e) {// 没权限e.printStackTrace();}//角色权限try {subject.checkRole(weihu);//有权限} catch (AuthorizationException e) {// 没权限e.printStackTrace();}
http://www.zqtcl.cn/news/502205/

相关文章:

  • 山西焦煤集团公司网站推广公司一般都怎么推广
  • 前端视频教程网站燕郊网站建设哪家好
  • 加强校园网站建设方案做核酸检测收费标准
  • 主机开通成功网站正在建设中中国建设银行登录官网
  • 12306的网站是哪个公司做的wordpress搜索页分类
  • 众筹网站的分析与设计wordpress 主题制作教程
  • 淘宝放单网站怎么做app制作公司哪个好
  • 地税城市维护建设税网站是什么意思订阅号怎么开通小程序
  • 网站添加二级域名wordpress火车头免登录发布
  • 大美工设计网站官网中山网站建设找丁生
  • 做算命网站标准版网站制作
  • 建设网站是普通办公吗温州 网站 公司
  • 哪里做外贸网站汉服网站开发背景
  • 建模外包网站企业代码查询入口
  • wordpress快速仿站视频教程广州知名网站建设哪家好
  • 楼盘网站开发网站服务理念
  • 私人ftp服务器seo整站如何优化
  • 做网站的工作叫什么美工需要会哪些软件
  • 阿克苏网站建设咨询海南跨境免税电商入驻流程
  • 母婴网站模板在线设计网站海报
  • 网站关键词优化公司哪家好如何跟客户沟通网站建设
  • 山西省经济建设投资公司网站滁州网站建设
  • 优秀设计网站哈尔滨vi设计公司
  • 如何建购物网站论坛类的网站怎样做
  • 河南省建设工程招投标协会网站安卓开发软件工具
  • 中国空间站wordpress无法选择服务器配置
  • 郑州家居网站建设服务公司asp网站助手
  • 做网站一般几个人WordPress 中英文翻译
  • 有没有兼职做网站的化工企业建网站
  • 石家庄展厅设计公司黑帽seo怎么做网站排名