"Apache Shiro介紹"閱讀與吸收
阿新 • • 發佈:2018-11-12
部落格原文地址:快樂成長
最近在學習Apache Shiro安全框架,一直迷迷糊糊的,直到閱讀到上面那篇博文後豁然開朗
引言
Apache Shiro是一個強大易用的Java安全框架,功能很多,本文或著重介紹如果進行認證,授權和會話管理
說到Shiro有一張圖是必須要貼的,下圖就是Shiro的三大核心元件:Subject,SecurityManager和Realms
- Subject:即“當前操作使用者”。但是,在Shiro中,Subject這一概念並不僅僅指人,也可以是第三方程序、後臺帳戶(Daemon Account)或其他類似事物。它僅僅意味著“當前跟軟體互動的東西”。但考慮到大多數目的和用途,你可以把它認為是Shiro的“使用者”概念。Subject代表了當前使用者的安全操作,SecurityManager則管理所有使用者的安全操作。
SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通過SecurityManager來管理內部元件例項,並通過它來提供安全管理的各種服務。
Realm: Realm充當了Shiro與應用安全資料間的“橋樑”或者“聯結器”。也就是說,當對使用者執行認證(登入)和授權(訪問控制)驗證時,Shiro會從應用配置的Realm中查詢使用者及其許可權資訊。
通常情況下,進行許可權管理的資料庫結構是這樣的
完成認證操作
認證就是驗證使用者身份的過程。在認證過程中,使用者需要提交實體資訊(Principals)和憑據資訊(Credentials)以檢驗使用者是否合法。最常見的“實體/憑證”組合便是“使用者名稱/密碼”組合。
- 首先從客戶端會發送一個http請求到伺服器,因為在伺服器的web.xml中配置瞭如下的內容,所以,請求會被過濾器攔截到
<filter> <!-- 去spring配置檔案中尋找同名bean --> <filter-name>shiroFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>shiroFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
- 我們可以發現類DelegatingFilterProxy是一個代理類,會去spring配置檔案中尋找同名的bean執行:shiroFilter
- 我們在Spring框架的配置檔案aplicationContext中配置同名的Bean類
<bean id="shiroFilter"
class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
</bean>
- 於是ShiroFilterFactoryBean工廠類就會執行,並且為我們生成一個Filter,當然我們還可以對其進行屬性注入