项目一:第十三天 一、菜单数据管理 二、权限数据管理 三、角色数据管理 四、用户数据管理 五、在realm中动态查询用户权限,角色 六、Shiro中整合ehcache缓存权限数据

课程计划

菜单数据管理java

权限数据管理ajax

角色数据管理json

用户数据管理缓存

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

Shiro中整合ehcache缓存权限数据框架

 

 

 

 

 

菜单数据添加

2.1 使用combotree父菜单项数据

 

 

 

 

一、 页面:menu_add.jspjsp

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

 

 

三、 使用treegrid组件的方法url

 

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

 

 

2.2 提交表单

 

 

 

 

2.3 服务端完成保存

 

 

Service要作判断:

 

 

 

权限数据模块

添加

1、页面提交表单

 

 

 

 

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

 

 

权限分页查询

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

 

 

 

 

 

角色数据模块

4.1 角色添加

页面:pages/system/role_add.jsp

 

实现步骤:

一、 页面端

a) 第一步:使用复选框checkbox展现权限数据

b) 第二步:使用ztree以简单数据格式展现菜单数据

c) 第三步:提交表单

二、 服务端

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 提交角色添加表单

一、 给保存按钮绑定事件

 

 

 

 

二、 问题:选中ztree组件中数据没有提交:缘由:节点数据不是checkbox,本质是span只是在动态修改样式

 

三、 解决:查询ztree API获取勾选中记录的方法:注意调用ztree的方法必须先获取到ztree对象

 

 

提交表单:须要在form表单中设置隐藏域:存放选中菜单id

 

 

增长隐藏域

 

 

 

 

4.1.4 服务端保存角色

一、 建立三层对象,注入

 

 

二、 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环境,只须要配置便可。

 

 

 

一、 提供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>

 

二、 配置缓存管理器

 

 

三、 将缓存管理器注入安全管理器

 

相关文章
相关标签/搜索