Shiro权限管理
Shiro權限管理
- 表的設計
- 引入pom包
- 三大核心組件
- shiro的運行過程
- 自定義Realm
- 配置Shiroconfig
- Shiro四種權限控制方式
- 登錄實例
shiro是一個安全框架 使用shiro可以非常容易開發出足夠好的應用,可以幫助我們完成:認證 授權 加密 會話管理 與web集成 緩存
表的設計
引入pom包
三大核心組件
*Subject:即”當前操作用戶“,但在shiro中不僅僅指人還指第三方進程 后臺賬戶 或其他類似事物。僅僅意味著”當前跟軟件交互的東西“。
*SecurityManager:是shiro框架的核心 ,用來管理內部組件實例 提供安全管理的各種服務。
*Realm:充當Shiro與應用安全數據間的”橋梁“或者連接器。當用戶執行認證(登錄)和授權(訪問控制)時,shiro會從應用配置的realm中查找用戶及其權限信息。
shiro的運行過程
- 程序員自己編寫的代碼 在程序中需要進行權限控制 需要調用Subject的API
Subject:主體,代表了當前“用戶”,這個用戶不一定是一個具體的人,與當前應用交互的任何東西都是Subject,如網絡爬蟲,機器人等;即一個抽象概念;所有Subject都綁定到SecurityManager,與Subject的所有交互都會委托給SecurityManager;可以把Subject認為是一個門面;SecurityManager才是實際的執行者;
SecurityManager:安全管理器;即所有與安全有關的操作都會與SecurityManager交互;且它管理著所有Subject;可以看出它是Shiro的核心,它負責與后邊介紹的其他組件進行交互,如果學習過SpringMVC,你可以把它看成DispatcherServlet前端控制器;
Realm:域,Shiro從從Realm獲取安全數據(如用戶、角色、權限),就是說SecurityManager要驗證用戶身份,那么它需要從Realm獲取相應的用戶進行比較以確定用戶身份是否合法;也需要從Realm得到用戶相應的角色/權限進行驗證用戶是否能進行操作;可以把Realm看成DataSource,即安全數據源。
自定義Realm
public class ShiroRealm extends AuthorizingRealm{
}
1、ShiroRealm父類AuthorizingRealm將獲取Subject相關信息分成兩步:獲取身份驗證信息(doGetAuthenticationInfo)及授權信息(doGetAuthorizationInfo);
2、doGetAuthenticationInfo獲取身份驗證相關信息:首先根據傳入的用戶名獲取User信息;然后如果user為空,那么拋出沒找到帳號異常UnknownAccountException;如果user找到但鎖定了拋出鎖定異常LockedAccountException;最后生成AuthenticationInfo信息,交給間接父類AuthenticatingRealm使用CredentialsMatcher進行判斷密碼是否匹配,如果不匹配將拋出密碼錯誤異常IncorrectCredentialsException;另外如果密碼重試此處太多將拋出超出重試次數異常ExcessiveAttemptsException;在組裝SimpleAuthenticationInfo信息時,需要傳入:身份信息(用戶名)、憑據(密文密碼)、鹽(username+salt),CredentialsMatcher使用鹽加密傳入的明文密碼和此處的密文密碼進行匹配。
執行時機:
當調用Subject currentUser = SecurityUtils.getSubject();
currentUser.login(token);
3、doGetAuthorizationInfo獲取授權信息:PrincipalCollection是一個身份集合,因為我們現在就一個Realm,所以直接調用getPrimaryPrincipal得到之前傳入的用戶名即可;然后根據用戶名調用UserService接口獲取角色及權限信息。
執行時機:
1、subject.hasRole(“admin”) 或 subject.isPermitted(“admin”):自己去調用這個是否有什么角色或者是否有什么權限的時候;
2、@RequiresRoles(“admin”)或@RequiresPermissions(“role:allotResource”) :在方法上加注解的時候;
3、[@shiro.hasPermission name = “admin”][/@shiro.hasPermission]:在頁面上加shiro標簽的時候,即進這個頁面的時候掃描到有這個標簽的時候。
配置Shiroconfig
Shiro四種權限控制方式
1.url級別權限控制
2.方法注解權限控制
3.頁面標簽權限控制
4.代碼級別權限控制
登錄實例
總結
- 上一篇: linux怎么看sda3内容,linux
- 下一篇: MATLAB教程(1) MATLAB