Apache Shiro
1.權限控制分為 a.粗粒度 URL 級別權限控制
b.細粒度方法級別權限控制
2.使用shiro進行權限控制主要有四種主要方式 :
a、 在程序中 通過 Subject 編程方式進行權限控制
b、 配置 Filter 實現 URL 級別粗粒度權限控制
c、 配置代理,基於注解實現細粒度權限控制
d、 在頁面中使用 shiro 自定義標簽實現 頁面顯示權限控制
3.shiro實際應用之基本配置:
a.用父工程引入shiro
b.配置web.xml
c.配置applicationContext-shiro.xml
d.配置安全管理器
搞定使用shiro之前所必須的基本配置后還需要了解 Shiro 的執行流程:
應用程序 --- Subject --- SecurityManager --- Realm 安全數據
自定義 Realm 對象,實現認證方法:
a.自定義 Realm 實現 Realm 接口 (實際開發中,只需要繼承 AuthorizingRealm )
b.將自定義 Realm 注入安全管理器 SecurityManager 當中
實現認證和授權方法.
4.對頁面部分功能添加權限和角色需要
5. Apache Shiro 權限控制(小結)
第一種: URL 級別粗粒度權限控制
配置 web.xml 的 shiroFilter 攔截 /*
在 spring 的 applicationContext*.xml 配置文件中配置同名 bean,配置
filterChainDefinitions 攔截控制規則
xxx.html* = anon (未登錄可以訪問)
xxx.html* =authc (必須登錄才能訪問 )
xxx.html* = perms[權限] (需要特定權限才能訪問)
xxx.html* = roles[角色] (需要特定角色才能訪問 )
第二種: 方法級別細粒度權限控制
在 spring 的 applicationContext*.xml 配置 spring aop 對 spring 管理 bean 對象開啟 shiro
注解支持
@RequiresPermissions(權限) 需要特定權限才能訪問
@RequiresRoles(角色) 需要特定角色才能訪問
@RequiresAuthentication 需要認證才能訪問
第三種:通過 shiro 自定義標簽,實現頁面元素顯示控制
<shiro:authenticated> 登錄后才能訪問
<shiro:hasPermission name="abc"> 需要特定權限才能訪問
<shiro:hasRole name="abc"> 需要特定角色才能訪問
第四種:在程序中通過代碼 判斷用戶是否具有指定權限(不太常用 ,有代碼侵入 )
補充: 權限表達式 “:”代表子權限
權限 courier 包含 courier:add、 courier:list、 courier:* ,如果用戶具有父權限,操作
所有子權限功能
權限 courier:list 包含 courier:list:10
/**
* @author: Mr.shan
* @creationTime:2017.12.3
*/