1. 程式人生 > >國際物流雲商專案筆記005:shiro的許可權控制

國際物流雲商專案筆記005:shiro的許可權控制

一、實現方式

       有兩種方式,第一種是在的shiro的配置檔案(applicationContext-shiro.xml)中(即過濾器),第二種是通過註解

二、程式碼實現

1、配置檔案

      在配置檔案的<property name="filterChainDefinitions">標籤下的<value>標籤中,通過配置perms過濾器來控制訪問,如需要控制部門管理的訪問,可通過如下設定。等號之前的表示需要控制的路徑,等號之後表示需要“部門管理”許可權。如果無許可權會根據配置檔案中的<property name="unauthorizedUrl" value="/index2.jsp" />標籤跳轉到指定的頁面

/sysadmin/deptAction* = perms["部門管理"]

       而“部門管理”這個許可權是根據在自定義的類“AuthRealm”中授權方法(doGetAuthorizationInfo)裡面,通過SimpleAuthorizationInfo物件的addStringPermission方法增加的許可權名稱。

2、註解

      由於Struts2框架和shiro框架存在衝突的問題,許可權配置不能在web層進行,所以可以在service層配置。如在deptAction裡面需要通過deptService物件的相關方法來獲取需要的資源,所以可以在該方法上新增@RequiresPermissions註解來控制。

程式碼如下:

@Override
@RequiresPermissions(value="部門管理")
public Page<Dept> findPage(Specification<Dept> spec, Pageable pageable) {
	return deptDao.findAll(spec, pageable);
}

如果需要呼叫findPage方法,則需要“部門管理”許可權,否則會拋異常

注意:註解的方式對於UserService無法控制,因為在自定義的AuthRealm類中的AuthenticationInfo方法需要UserService來獲取資料庫中的密碼。也就是說只要是在AuthRealm類中被AuthenticationInfo使用的,都無法通過註解來控制

三、區別

      配置檔案的方式無許可權時會跳轉到指定的頁面,註解則會直接拋異常。而且配置檔案比較集中,好管理,所以建議使用配置檔案的形式。

      建議寫一個action,配置控制權限,否則到最後寫的話會很累