天天看點

Shiro權限管理表的設計引入pom包三大核心元件shiro的運作過程自定義Realm配置ShiroconfigShiro四種權限控制方式登入執行個體

Shiro權限管理

  • 表的設計
  • 引入pom包
  • 三大核心元件
  • shiro的運作過程
  • 自定義Realm
  • 配置Shiroconfig
  • Shiro四種權限控制方式
  • 登入執行個體

shiro是一個安全架構 使用shiro可以非常容易開發出足夠好的應用,可以幫助我們完成:認證 授權 加密 會話管理 與web內建 緩存

表的設計

Shiro權限管理表的設計引入pom包三大核心元件shiro的運作過程自定義Realm配置ShiroconfigShiro四種權限控制方式登入執行個體

引入pom包

Shiro權限管理表的設計引入pom包三大核心元件shiro的運作過程自定義Realm配置ShiroconfigShiro四種權限控制方式登入執行個體

三大核心元件

*Subject:即”目前操作使用者“,但在shiro中不僅僅指人還指第三方程序 背景賬戶 或其他類似事物。僅僅意味着”目前跟軟體互動的東西“。

*SecurityManager:是shiro架構的核心 ,用來管理内部元件執行個體 提供安全管理的各種服務。

*Realm:充當Shiro與應用安全資料間的”橋梁“或者連接配接器。當使用者執行認證(登入)和授權(通路控制)時,shiro會從應用配置的realm中查找使用者及其權限資訊。

shiro的運作過程

  • 程式員自己編寫的代碼 在程式中需要進行權限控制 需要調用Subject的API
    Shiro權限管理表的設計引入pom包三大核心元件shiro的運作過程自定義Realm配置ShiroconfigShiro四種權限控制方式登入執行個體

    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标簽的時候,即進這個頁面的時候掃描到有這個标簽的時候。

Shiro權限管理表的設計引入pom包三大核心元件shiro的運作過程自定義Realm配置ShiroconfigShiro四種權限控制方式登入執行個體

配置Shiroconfig

Shiro權限管理表的設計引入pom包三大核心元件shiro的運作過程自定義Realm配置ShiroconfigShiro四種權限控制方式登入執行個體
Shiro權限管理表的設計引入pom包三大核心元件shiro的運作過程自定義Realm配置ShiroconfigShiro四種權限控制方式登入執行個體
Shiro權限管理表的設計引入pom包三大核心元件shiro的運作過程自定義Realm配置ShiroconfigShiro四種權限控制方式登入執行個體

Shiro四種權限控制方式

1.url級别權限控制

Shiro權限管理表的設計引入pom包三大核心元件shiro的運作過程自定義Realm配置ShiroconfigShiro四種權限控制方式登入執行個體

2.方法注解權限控制

Shiro權限管理表的設計引入pom包三大核心元件shiro的運作過程自定義Realm配置ShiroconfigShiro四種權限控制方式登入執行個體

3.頁面标簽權限控制

Shiro權限管理表的設計引入pom包三大核心元件shiro的運作過程自定義Realm配置ShiroconfigShiro四種權限控制方式登入執行個體

4.代碼級别權限控制

Shiro權限管理表的設計引入pom包三大核心元件shiro的運作過程自定義Realm配置ShiroconfigShiro四種權限控制方式登入執行個體

登入執行個體

Shiro權限管理表的設計引入pom包三大核心元件shiro的運作過程自定義Realm配置ShiroconfigShiro四種權限控制方式登入執行個體

繼續閱讀