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.跑專案