1. 程式人生 > >"Apache Shiro介紹"閱讀與吸收

"Apache Shiro介紹"閱讀與吸收

部落格原文地址:快樂成長

最近在學習Apache Shiro安全框架,一直迷迷糊糊的,直到閱讀到上面那篇博文後豁然開朗

引言

Apache Shiro是一個強大易用的Java安全框架,功能很多,本文或著重介紹如果進行認證,授權和會話管理

說到Shiro有一張圖是必須要貼的,下圖就是Shiro的三大核心元件:Subject,SecurityManager和Realms
Shiro核心元件關係

  • 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,當然我們還可以對其進行屬性注入