项目一:第十三天 1、菜单数据管理 2、权限数据管理 3、角色数据管理 4、用户数据管理 5、在realm中动态查询用户权限,角色 6、Shiro中整合ehcache缓存权限数据
1 课程计划
菜单数据管理
权限数据管理
角色数据管理
用户数据管理
在realm中动态查询用户权限,角色
Shiro中整合ehcache缓存权限数据
2 菜单数据添加
2.1 使用combotree父菜单项数据
1、 页面:menu_add.jsp
2、 修改组件样式:easyui-combotree,修改url 树型表格treeGrid跟下来数combotree要求数据格式基本一致。 Combotree通过text属性展示文本。
3、 使用treegrid组件的方法
4、 问题:返回数据中没有显示文本内容:解决
2.2 提交表单
2.3 服务端完成保存
Service要做判断:
3 权限数据模块
添加
1、页面提交表单
2、创建三层对象,服务端添加保存方法
权限分页查询
注意:页面datagrid增加分页条属性,自适应属性
4 角色数据模块
4.1 角色添加
页面:pages/system/role_add.jsp
实现步骤:
1、 页面端
a) 第一步:使用复选框checkbox展示权限数据
b) 第二步:使用ztree以简单数据格式展示菜单数据
c) 第三步:提交表单
2、 服务端
a) 第一步:保存角色数据
b) 第二步:角色关联权限
c) 第三步:角色关联菜单
4.1.1 使用复选框展示权限数据
1、发送请求
2、在权限action中添加查询所有的权限数据
3、在页面中ajax回调解析数据
4.1.2 使用ztree展示菜单数据
回顾ztree两种数据形式:
直接使用之前添加方法:listjax返回的数据json的标准数据格式。
--修改为返回数据是简单数据格式。
为了返回json中包含pId属性。故在实体中增加对应的get方法:
Action中添加新方法:
Service:
4.1.3 提交角色添加表单
1、 给保存按钮绑定事件
2、 问题:选中ztree组件中数据没有提交:原因:节点数据不是checkbox,本质是span只是在动态修改样式
3、 解决:查询ztree API获取勾选中记录的方法:注意调用ztree的方法必须先获取到ztree对象
提交表单:需要在form表单中设置隐藏域:存放选中菜单id
增加隐藏域
4.1.4 服务端保存角色
1、 创建三层对象,注入
2、 Service
/**
* @Description: 1、保存角色 2、角色关联菜单123,345 3、角色关联权限
* @return
*/
public void save(Role model, String menuIds, Integer[] permissionIds) {
//保存完角色对象:持久态
roleDao.save(model);
//角色关联菜单
if(StringUtils.isNotBlank(menuIds)){
String[] strings = menuIds.split(",");
for (String menuId : strings) {
Menu menu = menuDao.findOne(Integer.parseInt(menuId));
//持久态关联持久态
model.getMenus().add(menu); //向中间表T_role_menu添加记录
}
}
//角色关联权限
if(permissionIds!=null && permissionIds.length>0){
for (Integer permissionId : permissionIds) {
Permission permission = new Permission();
permission.setId(permissionId);//托管态 TODO 也可以根据ID调用dao查询到持久态权限对象
//持久态关联托管态
model.getPermissions().add(permission);//向中间表T_role_permission添加记录
}
}
}
4.2 角色列表查询
5 用户数据模块
5.1 用户添加
5.1.1 使用复选框展示角色数据
页面:pages/system/user_add.jsp
页面加载完成后:
服务端调用角色列表展示请求;
5.1.2 提交表单
5.1.3 服务端完成保存用户;关联角色
Action:
Service:
5.2 用户分页查询
6 在realm中动态查询用户的权限,角色
当需要进行权限校验时候:四种方式url拦截、注解、页面标签、代码级别,当需要验证权限会调用realm中的授权方法:
/**
* @Description: 给当前用户授权
* 使用shiro提供url拦截方式,调用此方法查询用户权限,角色
* 使用shiro提供注解方式,调用此方法查询用户权限,角色
* 使用shiro提方页面标签方式,调用此方法查询用户权限,角色
* @return
*/
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
List<Role> roleList = null;
List<Permission> permissionList = null;
System.out.println("验证用户是否有权限---给用户授权");
//创建授权信息对象
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
//动态根据用户id查询权限角色。
//如果内置管理员账户 拥有所有角色,所有的权限
User user = (User) SecurityUtils.getSubject().getPrincipal();
if(user.getUsername().equals("admin")){
roleList = roleDao.findAll();
permissionList = permissionDao.findAll();
}else{
//如果是其他普通用户 根据ID动态查询
roleList = roleDao.findByUserId(user.getId());
permissionList = permissionDao.findByUserId(user.getId());
}
if(permissionList!=null && permissionList.size()>0){
for (Permission permission : permissionList) {
info.addStringPermission(permission.getKeyword()); //addStringPermission不能为null或者空字符串
}
}
if(roleList!=null && roleList.size()>0){
for (Role role : roleList) {
info.addRole(role.getKeyword());
}
}
return info;
}
Dao:
7 Shiro整合ehCache缓存(下节课)
Shiro框架内部整合好ehcache环境,只需要配置即可。
1、 提供ehcache缓存配置文件
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<!-- 磁盘数据临时目录 -->
<diskStore path="java.io.tmpdir"/>
<!-- maxElementsInMemory:内存中存储数据最大个数
eternal:是否永久有效
timeToIdleSeconds:内存中对象空闲时间,单位秒
maxElementsOnDisk:磁盘中最大存储个数
timeToLiveSeconds:内存中对象存活时间,单位秒
diskExpiryThreadIntervalSeconds:指定清除内存数据线程执行时间周期
memoryStoreEvictionPolicy:清除数据策略: LRU:最近最少使用 FIFO:先进先出
-->
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
maxElementsOnDisk="10000000"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU">
<persistence strategy="localTempSwap"/>
</defaultCache>
</ehcache>
2、 配置缓存管理器
3、 将缓存管理器注入安全管理器
项目一:第十三天 1、菜单数据管理 2、权限数据管理 3、角色数据管理 4、用户数据管理 5、在realm中动态查询用户权限,角色 6、Shiro中整合ehcache缓存权限数据的更多相关文章
- 业务逻辑:五、完成认证用户的动态授权功能 六、完成Shiro整合Ehcache缓存权限数据
一. 完成认证用户的动态授权功能 提示:根据当前认证用户查询数据库,获取其对应的权限,为其授权 操作步骤: 在realm的授权方法中通过使用principals对象获取到当前登录用户 创建一个授权信息 ...
- 在realm中动态查询用户的权限&角色
@Controller @Scope("prototype") @Namespace("/") @ParentPackage("struts-defa ...
- 项目一:第十四天 1.在realm中动态授权 2.Shiro整合ehcache 缓存realm中授权信息 3.动态展示菜单数据 4.Quartz定时任务调度框架—Spring整合javamail发送邮件 5.基于poi实现分区导出
1 Shiro整合ehCache缓存授权信息 当需要进行权限校验时候:四种方式url拦截.注解.页面标签.代码级别,当需要验证权限会调用realm中的授权方法 Shiro框架内部整合好缓存管理器, ...
- Apache shiro的简单介绍与使用(与spring整合使用,并加入ehcache缓存权限数据)
apache shiro框架简介 Apache Shiro是一个强大而灵活的开源安全框架,它能够干净利落地处理身份认证,授权,企业会话管理和加密.现在,使用Apache Shiro的人越来越多,因为它 ...
- spring security中动态更新用户的权限
在程序的执行过程中,有时有这么一种需求,需要动态的更新某些角色的权限或某些人对应的权限,当前在线的用户拥有这个角色或拥有这个权限时,在不退出系统的情况下,需要动态的改变的他所拥有的权限. 需求:张三 ...
- springboot mybatis 项目框架源码 shiro 集成代码生成器 ehcache缓存
1.代码生成器: [正反双向](单表.主表.明细表.树形表,快速开发利器)freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本.处理类.service等完整模块2. ...
- JAVAEE——BOS物流项目12:角色、用户管理,使用ehcache缓存,系统菜单根据登录人展示
1 学习计划 1.角色管理 n 添加角色功能 n 角色分页查询 2.用户管理 n 添加用户功能 n 用户分页查询 3.修改Realm中授权方法(查询数据库) 4.使用ehcache缓存权限数据 n 添 ...
- 阶段5 3.微服务项目【学成在线】_day18 用户授权_07-动态查询用户权限-权限数据模型
3 动态查询用户权限 3.1 需求分析 截至目前在测试授权时使用的权限数据是静态数据,正常情况的流程是: 1.管理员给用户分配权限,权限数据写到数据库中. 2.认证服务在进行用户认证时从数据库读取用户 ...
- 阶段5 3.微服务项目【学成在线】_day18 用户授权_09-动态查询用户的权限-认证服务查询用户权限
认证服务查询用户权限 如果权限为空就New一个对象出来. 因为如果为空的话 下面 forEach就会报空指针的异常 启动服务测试 重新登陆 看到userExt已经获取到了用户的权限 权限的字符串 复制 ...
随机推荐
- 剑指offer--11.数组中出现次数超过一半的数字
unique(), count()函数好用 ---------------------------------------------------------------------- 时间限制:1秒 ...
- MySql 创建函数 Error Code : 1418
查看日志信息:show variables like 'log_%';显示'log_bin'.'log_bin_trust_function_creators'等状态 解决方法: 关闭binary l ...
- Network Saboteur (深搜递归思想的特殊使用)
个人心得:对于深搜的使用还是不到位,对于递归的含义还是不太清楚!本来想着用深搜构成一个排列,然后从一到n分割成俩个数组,然后后面发现根本实现不了,思路太混乱.后来借鉴了网上的思想,发现用数组来标志,当 ...
- BZOJ5319: [Jsoi2018]军训列队
BZOJ5319: [Jsoi2018]军训列队 https://lydsy.com/JudgeOnline/problem.php?id=5319 分析: 易知把所有人按原本的顺序放到\([K,K+ ...
- ConcurrentHashMap的扩容机制(jdk1.8)
ConcurrentHashMap相关的文章网上有很多,而关于ConcurrentHashMap扩容机制是很关键的点,尤其是在并发的情况下实现数组的扩容的问题经常会碰到,看到这篇写的具有代表性,详细讲 ...
- VirtualBox-Debian7.2-share
1.在VirtualBox(用的版本是4.3.6)中,选择虚拟机->设置-> 共享文件夹, 2.添加一个主机上的文件夹readhat用来作为共享文件夹,选中固定分配和自动挂载, 结果:进入 ...
- PAT 垃圾箱分布(30分)dijstra
垃圾箱分布 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 大家倒垃圾的时候,都希望垃圾箱距离自己比较近,但是谁都不愿意守着垃圾 ...
- 关于64位操作系统使用C#访问注册表失败的问题
通过C#的注册表类 Registry.GetValue 进行访问时,其返回值一直为空.然后认真检查检查再检查了注册表路径,发现路径没有一点问题,不说废话,上代码: if (Registry.GetVa ...
- maven 学习 十 关于打包
clean package -Dmaven.test.skip=true -P product 这个命令干的活: 清class文件,打包构建,跳过测试,注意最后一个 -P product, 会激活项目 ...
- CKEditor 自定义按钮插入服务端图片
CKEditor 富文本编辑器很好用,功能很强大,在加上支持服务端图片上传的CKFinder更是方便, 最近在使用CKFinder的时候发现存在很多问题,比如上传图片的时候,图片不能按时间降序排列,另 ...