java-WEB模块物流项目九
更新时间:2024-01-06 12:50:01 阅读量: 教育文库 文档下载
BOS 物流管理系统 第9天 权限系统设计
今天内容安排:
1、 权限控制 几种方式 URL级别 权限控制 (粗粒度权限控制 ) 方法级别 权限控制 (细粒度权限控制 ) 页面中显示的权限控制 ,使用自定义标签 2、 权限系统的数据表设计 3、 Apache Shiro 框架运行原理
4、 shiro 系统集成 (采用Spring 整合shiro 方式集成 )
5、 自定义Shiro Realm ,实现认证功能 (基于数据库完成 )
1.1. 权限系统的数据表如何设计
面试重点!!!
表设计 主要几个实体 : 用户、 角色、 权限 ? 用户 user : 访问系统的人
? 权限 function : 系统某个功能允许访问,对应的权限 (例如: 取派员查询权限、 区
域导入权限 … )
? 角色 role : 角色是权限的一个集合,方便用户授权
一个用户 对应 多个角色 ,一种角色 可以授予多个用户 === 多对多 一个角色 包含 多个权限 ,一个权限 可以属于 多个角色 === 多对多
设计角色表、权限表 都具有 id (编号 生成)、 name (名称 中文)、 code(关键字 编程使用 英文 ) 、description (描述 )
权限表为什么要这么设计 ?
目的为了实现 系统动态菜单 ,添加 菜单的路径、 是否需要生成菜单、 菜单优先级 (保证菜单显示顺序)、 父权限编号 (生成菜单父节点 )
2. 任务二:创建权限数据表、生成实体类
根据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简介
权限控制企业都是采用什么技术开发的 ?
? 自定义权限控制实现 (URL级别 Filter实现、 方法级别 自定义注解 Spring AOP
反射实现, 页面显示 自定义标签实现 ) ? Spring Security 安全框架
缺点:使用复杂、 Spring 官方项目 使用Apache Shiro 进行权限控制 ? Apache Shiro 比较新 ,很多企业了解到shiro 因为 spring side 项目
什么是Apache Shiro ?
Apache Shiro 可以不依赖任何技术使用, 通常在企业中和Spring 结合使用
3.2. 在项目导入shiro
Authentication: 认证 --- 用户登录 Authorization : 授权 ---- 权限管理
项目导入shiro ,使用maven坐标方式 导入
3.3. Shiro 原理简介
学习shiro ,只需要看规范就ok了 “Apache_Shiro_reference(中文版).pdf” 核心 ;
四大核心内容: 认证、授权、会话管理、 加密
Shiro 是如何进行权限控制的 ?
应用代码 ---- 调用Subject (shiro的Subject 就代表当前登陆用户) 控制权限 ---- Subject 在shiro框架内部 调用 Shiro SecurityManager 安全管理器 ----- 安全管理器调用 Realm (程序和安全数据连接器 )
通过以上分析,结论: 程序员使用shiro 只需要 1、 应用程序代码 调用Subject 2、 定义编写Realm连接安全数据
3.4. Shiro 整合BOS 项目,进行URL权限控制
Shiro虽然可以单独使用,但是企业现在使用最多还是 spring + shiro 方式 ! 参考“shiro 安全框架--最好的中文配置文档.pdf”
第一步: URL 级别权限控制, 配置Filter (web.xml )
第二步: 在applicationContext.xml 配置shiro的 Filter
常用规则 : anon 匿名访问 (不需要登录)
authc 认证访问 需要登录
perms 权限控制访问 需要权限 roles 角色控制访问 需要角色
user 用户控制访问 需要特定用户才能访问
url级别认证管理完成!
完成登陆
3.5. 编写Realm 实现用户身份认证(登录)
? 传统登录逻辑: 用户输入用户名和密码 ---- 传递数据库查询 ---- 返回user ---- 判断如果user不为null, 登录成功, 将user加入session ----- 如果 user为null ,调回登录页面
采用shiro 完成认证代码实现!
? Shiro实现登录逻辑
用户输入用户名和密码 ---- 应用程序调用Subject的login方法 ---- Subject 调用SecurityManager的方法 ---- SecurityManager 调用Realm的认证方法 ---- 认证方法根据登录用户名查询密码 ,返回用户的密码 ---- SecurityManager 比较用户输入的密码和真实密码是否一致
第一步: 修改 UserAction的 login方法
第二步: 需要为SecurityManager 提供 Realm 根据令牌对象数据 方法数据库...
通常自定义Realm 继承 AuthorizingRealm (提供 认证、授权功能 )
BOSRealm 实现认证方法 BOSRealm extends AuthorizingRealm
实现业务方法:
applicationContext.xml 注册 bosrealm 将 realm 给 安全管理器
如果用户名不存在
org.apache.shiro.authc.UnknownAccountException
如果密码错误
org.apache.shiro.authc.IncorrectCredentialsException
国际化信息 配置相关的错误信息
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 rose
auth_function表
auth_role 表
role_function表
user_role
1 号用户 tom 具有 基础设置 base crud 角色
2 号用户 rose 具有 业务受理 取派模块crud 角色
导出 sql tables.sql 下发!!!
3.7.2. 实现Realm 授权代码
Realm代码
超级管理员realm 实现
非超级管理员!
Service 代码 RoleService
FunctionService
DAO 代码
注册 ! 已经完成!
3.8. shiro 注解实现方法级别的权限控制
方法级别权限控制 原理
1、 自定义注解
2、 Spring AOP 代理 3、 反射获取注解信息
第一步: 配置applicationContext.xml
第二步: 在需要控制权限目标方法上,使用shiro的注解
? @ RequiresRoles 需要角色
? @RequiresPermissions 需要权限
例一: Action对象方法级别的控制 例如添加分区/取派员操作
错误:
java.lang.NoSuchMethodException: $Proxy117.pageQuery()
原因: Spring 代理优先对接口代理 Action 接口 只有execute方法,没有 pageQuery 方法 解决: 配置 applicationContext.xml 对目标类代理
测试
错误2:
Caused by: java.lang.ClassCastException: cannot
be
cast
to
java.lang.Class
java.lang.reflect.ParameterizedType
原因:参数泛型序列化问题
解决: 修改BaseAction 构造器 对代理类的父类型(StaffAction
问题3:action 注入的业务层接口实例null指针
java.lang.NullPointerException Service 无法注入
解决方案1: 配置struts2 文件
struts.objectFactory这个属性用于说明Struts2的对象池创建工厂,Struts2也有自己的对象池,就像Spring那样,在配置文件中你可以引用对象池中的对象,你可以借助于Spring中的对象池,当想要得到Spring中的对象池时,申明struts.objectFactory为Spring的对象池构建工厂。当指定struts.objectFactory为spring时,struts2框架就会把bean转发给spring来创建,装配,注入。但是bean创建完成之后,还是由struts容器来管理其生命周期。 在struts.xml中的代码如下: struts.objectFactory.spring.autoWire是用spring插件通过覆盖(override)Struts2的 ObjectFactory来增强核心框架对象的创建。 当创建一个对象的时候,它会用Struts2配置文件中的class属性去和Spring配置文件中的id属性进行关联, 如果能找到则由Spring创建,否则由Struts2框架自身创建,然后由Spring来装配。 解决2: 采用setter方法注入,对业务层对象设置名称 不推荐! Action 添加shiro 注解完成!\\ 补充 对于方法级别权限控制 如果登陆用户 没有角色或者权限 报 500错误! 一般提供友好页面 1: struts2 异常处理机制 struts.xml 配置异常处理 类型以及结果集 2: 配置全局结果集 3: 编写错误页面 获取异常信息 源码: 获取异常信息 标签如下 4: applicationContext.xml 2: web.xml 配置500错误 配置具体异常类型.. 问题4: 业务层添加权限注解 注解无效! 不行的 ! 但是没有异常 用户没有权限角色 也可以 执行该方法! 也就是 shiro 注解无效! applicationContext.xml 配置事务管理器 面向实现类做代理 Shiro URL级别控制和注解控制 ,没有权限处理效果 不一样 URL 控制,没有权限 ,页面自动跳转unauthorizedUrl 方法注解 权限控制, 没有权限,直接抛出org.apache.shiro.authz.AuthorizationException 如果登陆用户没有该权限 一般页面对应功能标签不需要显示! 3.9. shiro 标签库的使用说明 举例: 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.属性=?
正在阅读:
java-WEB模块物流项目九01-06
企业文化体系收集 - 图文03-12
中国人参果行业市场前景分析预测年度报告(目录) - 图文06-28
XX街2017年食品安全工作交流发言材料07-03
机工英语问答题答案12-02
第八章负债练习题12-15
高等数学A上册习题解答 至微分中值定理05-30
农村幼儿教师生存现状调查研究(2)04-19
又是一年教师节散文精选03-30
企业集团财务管理作业310-18
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 模块
- 物流
- 项目
- java
- WEB
- 通信技术基础习题答案
- 2018建设与房地产法规
- 对《婚姻法司法解释三》的认识
- 2016-2017学年新人教A版必修1高中数学 2.2.2 对数函数及其性质教案(精品)
- 高效液相色谱习题和答案
- 最新高考数学(理)模拟题及答案
- 高一英语期末考试试题(附答案)
- 2013级医学类统招研究生医学统计学试题A
- 公安部、工信部等六部门关于进一步加强和改进民用爆炸物品烟花爆竹安全管理工作的通知
- 复习 外国文学
- 会计继续教育考试答案
- 青岛婚纱照排名前十名哪个好
- 办公室文明建设结对帮扶工作说明报告
- 社区教育工作总结
- 考研高数求极限的方法指南
- 幼儿园新教师培训计划
- 辩手必备 - 史上最全的辩论赛经典辩题集锦
- 装饰自己的名字 人教版教案
- 北大是我美丽羞涩的梦 教案教学设计
- 信息安全试题库