項目一:第十三天 一、菜單數據管理 二、權限數據管理 三、角色數據管理 四、用戶數據管理 五、在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>

 

二、 配置緩存管理器

 

 

三、 將緩存管理器注入安全管理器

 

相關文章
相關標籤/搜索