课程计划

菜单数据管理

权限数据管理

角色数据管理

用户数据管理

realm中动态查询用户权限,角色

Shiro中整合ehcache缓存权限数据

 

 

 

 

菜单数据添加

2.1 使用combotree父菜单项数据

 

 

1、 页面:menu_add.jsp

2、 修改组件样式:easyui-combotree,修改url  树型表格treeGrid跟下来数combotree要求数据格式基本一致。 Combotree通过text属性展示文本。

 

3、 使用treegrid组件的方法

 

4、 问题:返回数据中没有显示文本内容:解决

 

2.2 提交表单

 

 

2.3 服务端完成保存

 

Service要做判断:

 

 

权限数据模块

添加

1、页面提交表单

 

 

2、创建三层对象,服务端添加保存方法

 

权限分页查询

注意:页面datagrid增加分页条属性,自适应属性

 

 

 

角色数据模块

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.1 用户添加

5.1.1 使用复选框展示角色数据

 

页面:pages/system/user_add.jsp

页面加载完成后:

 

服务端调用角色列表展示请求;

 

 

5.1.2 提交表单

 

 

5.1.3 服务端完成保存用户;关联角色

Action:

 

Service:

 

5.2 用户分页查询

 

 

 

在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:

 

 

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缓存权限数据的更多相关文章

  1. 业务逻辑:五、完成认证用户的动态授权功能 六、完成Shiro整合Ehcache缓存权限数据

    一. 完成认证用户的动态授权功能 提示:根据当前认证用户查询数据库,获取其对应的权限,为其授权 操作步骤: 在realm的授权方法中通过使用principals对象获取到当前登录用户 创建一个授权信息 ...

  2. 在realm中动态查询用户的权限&角色

    @Controller @Scope("prototype") @Namespace("/") @ParentPackage("struts-defa ...

  3. 项目一:第十四天 1.在realm中动态授权 2.Shiro整合ehcache 缓存realm中授权信息 3.动态展示菜单数据 4.Quartz定时任务调度框架—Spring整合javamail发送邮件 5.基于poi实现分区导出

    1 Shiro整合ehCache缓存授权信息 当需要进行权限校验时候:四种方式url拦截.注解.页面标签.代码级别,当需要验证权限会调用realm中的授权方法   Shiro框架内部整合好缓存管理器, ...

  4. Apache shiro的简单介绍与使用(与spring整合使用,并加入ehcache缓存权限数据)

    apache shiro框架简介 Apache Shiro是一个强大而灵活的开源安全框架,它能够干净利落地处理身份认证,授权,企业会话管理和加密.现在,使用Apache Shiro的人越来越多,因为它 ...

  5. spring security中动态更新用户的权限

    在程序的执行过程中,有时有这么一种需求,需要动态的更新某些角色的权限或某些人对应的权限,当前在线的用户拥有这个角色或拥有这个权限时,在不退出系统的情况下,需要动态的改变的他所拥有的权限. 需求:张三 ...

  6. springboot mybatis 项目框架源码 shiro 集成代码生成器 ehcache缓存

    1.代码生成器: [正反双向](单表.主表.明细表.树形表,快速开发利器)freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本.处理类.service等完整模块2. ...

  7. JAVAEE——BOS物流项目12:角色、用户管理,使用ehcache缓存,系统菜单根据登录人展示

    1 学习计划 1.角色管理 n 添加角色功能 n 角色分页查询 2.用户管理 n 添加用户功能 n 用户分页查询 3.修改Realm中授权方法(查询数据库) 4.使用ehcache缓存权限数据 n 添 ...

  8. 阶段5 3.微服务项目【学成在线】_day18 用户授权_07-动态查询用户权限-权限数据模型

    3 动态查询用户权限 3.1 需求分析 截至目前在测试授权时使用的权限数据是静态数据,正常情况的流程是: 1.管理员给用户分配权限,权限数据写到数据库中. 2.认证服务在进行用户认证时从数据库读取用户 ...

  9. 阶段5 3.微服务项目【学成在线】_day18 用户授权_09-动态查询用户的权限-认证服务查询用户权限

    认证服务查询用户权限 如果权限为空就New一个对象出来. 因为如果为空的话 下面 forEach就会报空指针的异常 启动服务测试 重新登陆 看到userExt已经获取到了用户的权限 权限的字符串 复制 ...

随机推荐

  1. iostat相关参数说明——await:平均每次设备I/O操作的等待时间 (毫秒),如果%util接近 100%,说明产生的I/O请求太多

    iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视.它的特点是汇报磁盘活动统计情况,同时也会汇报出 CPU使用情况.同vmstat一样, ...

  2. 条款49:了解new-handle行为

    多线程下的内存管理与单线程下是完全不同的,因为heap是一个可以被全局改动的资源,所以所有的线程都有可能去访问这一资源,这回导致很多的race_conditions.   当operator new未 ...

  3. hihocoder#1148 : 2月29日 计算闰年的个数

    计算到某年为止的闰年数,其实很简单.设要计算的年为A,则到A年为止(含A年)的闰年数为: 闰年数=INT(A/)-INT(A/)+INT(A/) 这里:INT为取整数函数 #include <c ...

  4. Java How to Iterate Map

    常用iterate 方法 Map<Integer, String> m = new HashMap<Integer, String>(); for(Map.Entry<I ...

  5. Python函数-map()

    map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回.如下: def ...

  6. emacs复制粘贴和查找撤销

    在emacs下复制粘贴是这样的.1.在任一行中按下ctrl+space键,最底行会显示 Mark set 表示已经开始标记了.2.移动鼠标或者选中文字然后,可以有两种方式:Alt+w (复制) 或者  ...

  7. 解决 No module named PyQt5.QtWebKitWidgets

    原因:在 PyQt 5.6(+) 版本中, 新增 QtWebEngineWidgets 代替QtWebKitWidgets. 示例代码:#coding: utf-8 import sysfrom Py ...

  8. phpstorm win/mac git配置 破解

    http://blog.csdn.net/fenglailea/article/details/53350080 phpstorm中git配置教程: http://blog.csdn.net/knig ...

  9. 在ARM模式下捕获VM并创建新VM

    在ASM模式下,可以通过Manage Portal上捕获VM的Image,并创建新的VM.在ARM模式下,在Portal上目前还没有这个功能,要做VM镜像的捕获和创建新的VM需要用powershell ...

  10. laravel 配置文件的使用

    在开发的时候有许多数据是固定的 或者是多处使用的, 那么我们可以把它保存到配置文件中, 这样将来我们可以直接从配置文件中读取这个数据,如果有特殊的数据需要改变的时候,我们也可以在单独特定的环境中,不使 ...