Apache shiro(4)-緩衝

來源:互聯網
上載者:User

標籤:

        
    shiro的可以許可權控制內容包括:URL地址、Web頁面的元素、以及方法,即shiro對使用者權限的控制是細粒度的。從使用者的一次訪問來說,他可能需要最多經過三種、多次的驗證。這裡的多次怎麼說呢?如果說Web頁面的有10個元素加了Shiro標籤,則一個頁面的載入就需要10次驗證。一句話:Shiro驗證使用者權限的頻率很高,即訪問資料庫取得使用者權限資訊的頻率很高。同時,使用者的許可權資訊,是基本穩定的。很明顯,這樣的情景需要——緩衝。
shiro對緩衝的支援    shiro並沒有實現緩衝的功能,shiro的緩衝支援只是一個抽象的API。這個抽象是基於從多緩衝機制的產品之上的。換句話說,shiro可以“坐擁三千妃子”啊。下面是《Apache Shiro 1.2.x 使用者指南》 中文翻譯中的內容:
    Shiro 有三個重要的緩衝介面:
  • CacheManager - 負責所有緩衝的主要管理組件,它返回 Cache 執行個體。
  • Cache - 維護key/value 對。
  • CacheManagerAware - 通過想要接收和使用 CacheManager 執行個體的組件來實現。
    CacheManager 返回Cache 執行個體,各種不同的Shiro 組件使用這些Cache 執行個體來緩衝必要的資料。任何實現了 CacheManagerAware 的 Shiro 組件將會自動地接收一個配置好的 CacheManager,該 CacheManager 能夠用來擷取 Cache 執行個體。
緩衝的配置(spring mvc)    shiro的緩衝配置非常簡單,如下:
  • 在application-shiro.xml(shiro的設定檔):      
<span style="font-family:FangSong_GB2312;"><!-- shiro的緩衝管理器,然後需要將緩衝管理器注入           到安全管理其中  --><bean id="shiroEhcacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">        <!--classpath是緩衝屬性的設定檔  --><property name="cacheManagerConfigFile" value="classpath:config/ehcache-shiro.xml" /></bean></span>
<span style="font-family:FangSong_GB2312;"><!-- shiro管理中心類  start--> <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">     <property name="realm" ref="shiroRealm"></property>      <property name="subjectFactory" ref="casSubjectFactory"></property>          <!--注入緩衝管理器  -->     <property name="cacheManager" ref="shiroEhcacheManager"></property></bean></span>
  • 緩衝屬性設定檔:
<span style="font-family:FangSong_GB2312;"><ehcache updateCheck="false" name="shiroCache">    <defaultCache              <!--最大緩衝數量  -->            maxElementsInMemory="10000"            eternal="false"            timeToIdleSeconds="120"            timeToLiveSeconds="120"            overflowToDisk="false"            diskPersistent="false"            diskExpiryThreadIntervalSeconds="120"            /></ehcache></span>
shiro使用緩衝遇到的問題      shiro使用緩衝極大的提高了程式的反應速度,但是對於新手來說,很容易碰到兩個問題。
      第一個:
            現象:退出登入後,再次訪問程式無需重新登入。
            原因:退出登入時,沒有清理緩衝。
      第二個:
            現象:改變使用者權限時,不能及時反映出來,需要重新登陸才可以。
            原因:改變使用者權限是,緩衝中的資料還是原來的許可權資訊。
      對於第一個問題:上網查的一些資料,大部分建議改造一下realm的自訂實現,重寫一下退出的緩衝處理方法。對於新手來說,這可能不太好理解。那麼這裡推薦一種簡單的方式:過濾退出地址,交給shiro的logout過濾器處理。logout會調用subject.logout()方法,清理掉shiro的緩衝。只要簡單的在過濾器鏈中加入對退出地址的過濾就好了,配置如下:
<span style="font-family:FangSong_GB2312;"><!-- 過濾器鏈,請求url對應的過濾器 -->     <property name="filterChainDefinitions">           <value>                 /message.jsp=anon                                    <!-- 退出地址,交給logout過濾器處理 -->                 /logout=logout                 /shiro-cas=casFilter                        /** =user           </value>     </property></span>
      對於第二個問題,也就說如何解決緩衝同步。目前我自己還沒有好的解決方案,有知道的麻煩,教教我。這裡,我只能是粗暴的選擇,不使用緩衝。網上有解決方案,我還需要研究研究。
叢集緩衝    這次的項目,實際上我需要用到的是叢集緩衝。所以對於上面的第二個問題,還沒有去深入。但是,叢集緩衝這塊也還沒有弄懂。所以,下篇再介紹了。

Apache shiro(4)-緩衝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.