1. 程式人生 > >shiro的使用者登入和許可權管理

shiro的使用者登入和許可權管理

shiro能做什麼?

登入驗證:
 不是登入使用者不能訪問敏感資源,只有登入了才可以訪問敏感資源
許可權驗證:
 不同的使用者賬號登入成功之後,使用者所使用的功能不同

類似的安全框架:
 1.spring security 功能完善,學習成本偏高
 2.shiro 學習成本低,簡單的安全框架,基本功能存在(登入認證,許可權認證)
 3.spring mvc interceptor(攔截器) 只能做登入認證,不能做許可權認證

一、shiro的jar包依賴

在pom.xml檔案中配置:

        <!-- Apache Shiro 許可權依賴 -->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-all</artifactId>
            <version>1.2.3</version>
        </dependency>
        <!-- spring aop 依賴 -->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-aop</artifactId>
          <version>4.3.7.RELEASE</version>
        </dependency>

        <dependency>
          <groupId>org.aspectj</groupId>
          <artifactId>aspectjweaver</artifactId>
          <version>1.8.7</version>
        </dependency>

二、shiro的配置檔案

配置檔案關係注入圖如下:

web.xml檔案配置:

建立spring_shiro.xml檔案並配置資訊交給將shiro配件的bean交給spring容器管理:

 

三、shiro的原理圖

shiro的登入認證:
 使用者登入成功就可以訪問敏感資源
 之後的所有訪問都通過shiro直接訪問指定的資源
 使用者沒有登入成功,跳轉到指定的登入頁面

//環繞通知,可以控制目標方法的執行
 public Object around(ProceedJoinPoint pjp){
     try{
         if(登入過){
         returnValue=pjp.proceed();
         }else{
      //由shiro控制跳轉到指定的頁面,由spring_shiro.xml提供跳轉的目的地
         }
     }
     Object returnValue=null; 
 }

注意:沒有shiro,專案的功能照樣跑起來,新增shiro實際就是橫切,把shiro橫切到專案中, 實際就是代理模式!!!

 shiro的許可權認證:
 一定是在登入認證完成後,才能做shiro的許可權認證,根據使用者的許可權顯示不同

四、shiro的功能模組圖

shiro的功能列表:

主要的功能:
Authentication:登入認證
authorrization:許可權認證
session management:用shiro管理會話物件
cryptography:加密處理

輔助功能:
 web support:shiro可以用在web專案中
 caching:快取 用shiro做快取管理
 concurrency:支援高併發
 Testing:用shiro測試
 runas :shiro可以應用java專案
 remember me:記住我

shiro的使用步驟:
application code:使用者的程式碼,代表的一個shiro的啟動入口,用shiro的api來啟動shiro可以理解成把使用者的資料用shiro的api傳遞給shiro,由shiro來處理使用者資料

 subject:原義是主題,每一個subject代表一個使用者,抽象的使用者,就是用shiro對使用者的資料
 進行封裝,把資料封裝給token(令牌),最終可以狹義理解成是資料的封裝
securitymanager:安全管理中心是shiro的核心,所有的資料都要經過shiro的安全管理中心來管理
realm:英文原義是域或範圍,可以理解成原始資料的源頭,源頭域,

五、策略模型圖

六、實際應用

shiro專案的搭建步驟:
1.建立專案
2.匯入jar
 a.手動匯入
 b.maven匯入
3.把shiro的物件,交給spring容器來管理
 web.xml
 新增一個shiro的過濾器,要用這個過濾器過濾所有url
 spring_shiro.xml
 配置shiro的安全管理中心的物件,還有shiro的過濾器物件,
 還有登入和許可權認證的介面的實現物件
4.建立java類,要給相應的介面給實現類
 建立java類AuthRealm extends AuthorizingRealm
 AuthorizingRealm實現自
 implements org.apache.shiro.authz.Authorizer, org.apache.shiro.util.Initializable, 
org.apache.shiro.authz.permission.PermissionResolverAware, org.apache.shiro.authz.permission.RolePermissionResolverAware 
5.跑專案