java-WEB模块物流项目九.docx

上传人:牧羊曲112 文档编号:1701428 上传时间:2022-12-15 格式:DOCX 页数:37 大小:2.33MB
返回 下载 相关 举报
java-WEB模块物流项目九.docx_第1页
第1页 / 共37页
java-WEB模块物流项目九.docx_第2页
第2页 / 共37页
java-WEB模块物流项目九.docx_第3页
第3页 / 共37页
java-WEB模块物流项目九.docx_第4页
第4页 / 共37页
java-WEB模块物流项目九.docx_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《java-WEB模块物流项目九.docx》由会员分享,可在线阅读,更多相关《java-WEB模块物流项目九.docx(37页珍藏版)》请在三一办公上搜索。

1、BOS 物流管理系统 第9天 权限系统设计 今天内容安排:1、 权限控制 几种方式 URL级别 权限控制 (粗粒度权限控制 )方法级别 权限控制 (细粒度权限控制 )页面中显示的权限控制 ,使用自定义标签 2、 权限系统的数据表设计 3、 Apache Shiro 框架运行原理4、 shiro 系统集成 (采用Spring 整合shiro 方式集成 )5、 自定义Shiro Realm ,实现认证功能 (基于数据库完成 )1.1. 权限系统的数据表如何设计 面试重点! 表设计 主要几个实体 : 用户、 角色、 权限 l 用户 user : 访问系统的人 l 权限 function : 系统某个

2、功能允许访问,对应的权限 (例如: 取派员查询权限、 区域导入权限 )l 角色 role : 角色是权限的一个集合,方便用户授权 一个用户 对应 多个角色 ,一种角色 可以授予多个用户 = 多对多 一个角色 包含 多个权限 ,一个权限 可以属于 多个角色 = 多对多 设计角色表、权限表 都具有 id (编号 生成)、 name (名称 中文)、 code(关键字 编程使用 英文 ) 、description (描述 )权限表为什么要这么设计 ? 目的为了实现 系统动态菜单 ,添加 菜单的路径、 是否需要生成菜单、 菜单优先级 (保证菜单显示顺序)、 父权限编号 (生成菜单父节点 )2. 任务二

3、:创建权限数据表、生成实体类根据PDM 导出SQL 语句 auth_function 权限表 auth_role 角色表 role_function 角色权限关系表user_role 用户角色关系表 生成实体类,使用hibernate3-maven-plugin 插件 修改 src/main/resources/reveng.xml 替换之前 domain.user下的User实体类 实体类和表设计完成!3. 任务三:Apache Shiro 权限控制 3.1. Shiro简介 权限控制企业都是采用什么技术开发的 ? l 自定义权限控制实现 (URL级别 Filter实现、 方法级别 自定义注

4、解 Spring AOP 反射实现, 页面显示 自定义标签实现 )l Spring Security 安全框架 缺点:使用复杂、 Spring 官方项目 使用Apache Shiro 进行权限控制 l Apache Shiro 比较新 ,很多企业了解到shiro 因为 spring side 项目 什么是Apache Shiro ? Apache Shiro 可以不依赖任何技术使用, 通常在企业中和Spring 结合使用 3.2. 在项目导入shiro Authentication: 认证 - 用户登录 Authorization : 授权 - 权限管理 项目导入shiro ,使用maven坐

5、标方式 导入 1.2.2 org.apache.shiroshiro-all$shiro.version3.3. Shiro 原理简介 学习shiro ,只需要看规范就ok了 “Apache_Shiro_reference(中文版).pdf”核心 ;四大核心内容: 认证、授权、会话管理、 加密 Shiro 是如何进行权限控制的 ?应用代码 - 调用Subject (shiro的Subject 就代表当前登陆用户) 控制权限 - Subject 在shiro框架内部 调用 Shiro SecurityManager 安全管理器 - 安全管理器调用 Realm (程序和安全数据连接器 )通过以上分

6、析,结论:程序员使用shiro 只需要 1、 应用程序代码 调用Subject 2、 定义编写Realm连接安全数据 3.4. Shiro 整合BOS 项目,进行URL权限控制 Shiro虽然可以单独使用,但是企业现在使用最多还是 spring + shiro 方式 !参考“shiro 安全框架-最好的中文配置文档.pdf”第一步: URL 级别权限控制, 配置Filter (web.xml )shiroSecurityFilterorg.springframework.web.filter.DelegatingFilterProxytargetFilterLifecycletrueshiro

7、SecurityFilter/* 这个Filter 是 spring提供 ,DelegationFilterProxy 是代理Filter (会自动找 和 同名的 对象 )第二步: 在applicationContext.xml 配置shiro的 Filter 配置shiroFilter后,可以应用 10种过滤规则 配置shiroFilter 其实是一个过滤器链,含有10个Filter 常用规则 :anon 匿名访问 (不需要登录)authc 认证访问 需要登录 perms 权限控制访问 需要权限 roles 角色控制访问 需要角色user 用户控制访问 需要特定用户才能访问 /login.j

8、sp = anon/validatecode.jsp = anon/css/* = anon/js/* = anon/images/* = anon/user_login.action = anon/page_base_staff.action = permsstaff 表示访问该资源必须要有staff权限/page_base_region.action = rolesbase 表示访问该资源必须要有base角色/* = authc / 必须要登陆可以访问资源url级别认证管理完成!完成登陆3.5. 编写Realm 实现用户身份认证(登录) l 传统登录逻辑: 用户输入用户名和密码 - 传递数

9、据库查询 - 返回user - 判断如果user不为null, 登录成功, 将user加入session - 如果 user为null ,调回登录页面 采用shiro 完成认证代码实现!l Shiro实现登录逻辑用户输入用户名和密码 - 应用程序调用Subject的login方法 - Subject 调用SecurityManager的方法 - SecurityManager 调用Realm的认证方法 - 认证方法根据登录用户名查询密码 ,返回用户的密码 - SecurityManager 比较用户输入的密码和真实密码是否一致 第一步: 修改 UserAction的 login方法 第二步:

10、需要为SecurityManager 提供 Realm 根据令牌对象数据 方法数据库.通常自定义Realm 继承 AuthorizingRealm (提供 认证、授权功能 )BOSRealm 实现认证方法 BOSRealm extends AuthorizingRealm实现业务方法:applicationContext.xml 注册 bosrealm 将 realm 给 安全管理器 如果用户名不存在org.apache.shiro.authc.UnknownAccountException如果密码错误 org.apache.shiro.authc.IncorrectCredentialsEx

11、ception国际化信息 配置相关的错误信息3.6. 用户退出功能 1: index.jsp 页面 添加退出连接 2:action认证完成!3.7. 自定义Ream 实现用户授权授权流程说明3.7.1. 准备测试数据 applicationContext.xml 添加角色和权限配置在t_user、auth_role、auth_function、role_function、user_role 无张表 插入一些测试数据 t_user 插入 两个用户tom roseauth_function表auth_role 表 role_function表user_role1 号用户 tom 具有 基础设置 b

12、ase crud 角色2 号用户 rose 具有 业务受理 取派模块crud 角色导出 sql tables.sql 下发!3.7.2. 实现Realm 授权代码 Realm代码超级管理员realm 实现非超级管理员!Service 代码RoleServiceFunctionServiceDAO 代码 注册 ! 已经完成!3.8. shiro 注解实现方法级别的权限控制 方法级别权限控制 原理 1、 自定义注解 2、 Spring AOP 代理 3、 反射获取注解信息 第一步: 配置applicationContext.xml 第二步: 在需要控制权限目标方法上,使用shiro的注解 l Re

13、quiresRoles 需要角色l RequiresPermissions 需要权限 例一: Action对象方法级别的控制 例如添加分区/取派员操作错误: java.lang.NoSuchMethodException: $Proxy117.pageQuery()原因: Spring 代理优先对接口代理 Action 接口 只有execute方法,没有 pageQuery 方法解决: 配置 applicationContext.xml 对目标类代理测试错误2: Caused by: java.lang.ClassCastException: java.lang.Class cannot be

14、 cast to java.lang.reflect.ParameterizedType原因:参数泛型序列化问题解决: 修改BaseAction 构造器 对代理类的父类型(StaffAction) 获取参数化泛型问题3:action 注入的业务层接口实例null指针java.lang.NullPointerException Service 无法注入 解决方案1: 配置struts2 文件struts.objectFactory这个属性用于说明Struts2的对象池创建工厂,Struts2也有自己的对象池,就像Spring那样,在配置文件中你可以引用对象池中的对象,你可以借助于Spring中的

15、对象池,当想要得到Spring中的对象池时,申明struts.objectFactory为Spring的对象池构建工厂。当指定struts.objectFactory为spring时,struts2框架就会把bean转发给spring来创建,装配,注入。但是bean创建完成之后,还是由struts容器来管理其生命周期。在struts.xml中的代码如下:struts.objectFactory.spring.autoWire是用spring插件通过覆盖(override)Struts2的 ObjectFactory来增强核心框架对象的创建。当创建一个对象的时候,它会用Struts2配置文件中的

16、class属性去和Spring配置文件中的id属性进行关联,如果能找到则由Spring创建,否则由Struts2框架自身创建,然后由Spring来装配。解决2: 采用setter方法注入,对业务层对象设置名称 不推荐!Action 添加shiro 注解完成!补充 对于方法级别权限控制 如果登陆用户 没有角色或者权限 报 500错误!一般提供友好页面 1: struts2 异常处理机制 struts.xml 配置异常处理 类型以及结果集2: 配置全局结果集3: 编写错误页面 获取异常信息 源码:获取异常信息 标签如下4: applicationContext.xml 2: web.xml 配置5

17、00错误 配置具体异常类型.问题4: 业务层添加权限注解 注解无效!不行的 ! 但是没有异常 用户没有权限角色 也可以 执行该方法! 也就是 shiro 注解无效!applicationContext.xml 配置事务管理器 面向实现类做代理Shiro URL级别控制和注解控制 ,没有权限处理效果不一样 URL 控制,没有权限 ,页面自动跳转unauthorizedUrl 方法注解 权限控制, 没有权限,直接抛出org.apache.shiro.authz.AuthorizationException 如果登陆用户没有该权限 一般页面对应功能标签不需要显示!3.9. shiro 标签库的使用说

18、明举例: staff.jsp 页面 引入shiro 标签库在指定标签 添加角色或者权限登陆用户如果有base角色就会显示该标签!小结: 1、 权限控制的几种方式 ? 实现原理? URL 、 方法注解、 页面显示标签控制 2、 画出 权限控制数据表结构 3、 Shiro权限控制好处, 为什么要使用Apache Shiro ? 使用简单,灵活 数据可以采用自定义Realm 连接安全数据 (没有数据来源要求 , 来自文件、 数据库、网络 ) 4、 Shiro 运行原理 应用代码 - Subject - SecurityManager - Realm 5、 自定义Realm 实现 用户认证和授权 6、 Spring 整合 Shiro 进行 URL级别权限控制和方法级别 权限控制 7、 画图 整理 shiro 认证和授权,调用过程 SQL和HQL (JPQL )多表查询 SQL : select from 表A inner join / left outer join 表B on A.xx = B.xx where 条件 HQL(JPQL):只需要记忆 迫切连接查询(带fetch) from 类A 别名a inner join fetch / left outer join fetch a.属性 别名b where a.属性=? and b.属性=?

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号