1. 程式人生 > >shiro退出登陸清空快取實現

shiro退出登陸清空快取實現

  上一篇介紹了使用springmvc整合shiro登陸過程(http://www.cnblogs.com/nosqlcoco/p/5579081.html),通過FormAuthenticationFilter過濾器獲取到使用者輸入的賬號密碼。

  shiro是一個被廣泛使用的安全層框架,通過xml配置方式與spring無縫對接,使用者的登陸/退出/許可權控制/Cookie等管理系統基礎功能交給shiro來管理。

  一般,在JavaWEB管理平臺系統時,使用者退出系統之前沒需要清除使用者資料和關閉連線,防止垃圾資料堆積,shiro提供了LogoutFilter過濾器,我們可以繼承LogoutFilter,重寫preHandle方法,實現清除快取功能。

  spring-shiro.xml:

複製程式碼
    <!-- 安全認證過濾器 -->
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <property name="securityManager" ref="securityManager" />
        <property name="loginUrl" value="/b/login" />
        <property name="successUrl" value="/b" />
        <property name="filters">
            <map>
                <!--退出過濾器-->
                <entry key="logout" value-ref="systemLogoutFilter" />
            </map>
        </property>
        <property name="filterChainDefinitions">
            <value>
                /b/login = authc
                /b/logout = logout
                /b/** = user
            </value>
        </property>
    </bean>
複製程式碼

 當呼叫的路徑匹配到/b/logout,會進入到SystemLogoutFilter過濾器,SystemLogoutFilter繼承了LogoutFilter,並重寫了preHandle方法,在preHandle方法執行需要清空的資料。

複製程式碼
@Service
public class SystemLogoutFilter extends LogoutFilter {
    @Override
    protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception {
        //在這裡執行退出系統前需要清空的資料

     Subject subject = getSubject(request, response);

        String redirectUrl = getRedirectUrl(request, response, subject);

        try {

            subject.logout();

        } catch (SessionException ise) {

           ise.printStackTrace();

        }

        issueRedirect(request, response, redirectUrl);

     //返回false表示不執行後續的過濾器,直接返回跳轉到登入頁面

        return false;

    }
}
複製程式碼

注意,需要通過@Service註解,使用spring容器來管理,在spring-shiro.xml中配置shiro過濾器直接使用

<entry key="logout" value-ref="systemLogoutFilter" />

轉載自:http://www.cnblogs.com/nosqlcoco/p/5587294.html

相關推薦

分享知識-快樂自己:Shiro 退出登陸快取實現

shiro是一個被廣泛使用的安全層框架,通過xml配置方式與spring無縫對接,使用者的登陸/退出/許可權控制/Cookie等管理系統基礎功能交給shiro來管理。 一般,在JavaWEB管理平臺系統時,使用者退出系統之前沒需要清除使用者資料和關閉連線,防止垃圾資料堆積,shiro提供了LogoutFil

shiro退出登陸快取實現

  上一篇介紹了使用springmvc整合shiro登陸過程(http://www.cnblogs.com/nosqlcoco/p/5579081.html),通過FormAuthenticationFilter過濾器獲取到使用者輸入的賬號密碼。   shiro是一個被

分享知識-快樂自己:Shiro 退出登陸緩存實現

spa xtend hub use and size ESS direct 執行 shiro是一個被廣泛使用的安全層框架,通過xml配置方式與spring無縫對接,用戶的登陸/退出/權限控制/Cookie等管理系統基礎功能交給shiro來管理。 一般,在JavaWEB管理

Android開發:計算快取大小並且快取

專案中碰到了計算快取大小和清空快取的功能,這個很常見的功能,幾乎每個APP都有,以為實現很簡單,網上搜了一大堆,發現都不是符合我需要的,而且經常刪除的沒有效果,於是又另外找了一些資料,折騰了蠻久,終於完成了 以下的這個類的功能很簡單,計算你的快取總大小,不管內部快取還是外部快取,和清空快取,包括

Android WebView快取

Android原生和H5混合開發,要求使用者退出登入後清空H5所有的快取; 1、清空Cookie CookieSyncManager.createInstance(context.getApplicationContext()); CookieManager

IE/Firefox每次重新整理時自動檢查網頁更新,無需手動快取的設定方法(轉)

1.在firefox的位址列上輸入about:config回車 2.找到browser.cache.check_doc_frequency選項,雙擊將3改成1儲存即可。 那麼這個選項每個值都是什麼含義的。請看下面的解釋: 0: Once per session 每個程序一次 每次啟動Fire

redis如何快取

前言: 如果你們的專案用到redis啦,雖然設定了過期時間,但有時候修改bug,仍然需要及時清空快取,去讀資料庫的資料,所以這篇文章講解如何在linux下清除redis的快取。 正文: 1.首先進到redis的安裝目錄,進到src目錄下,找到redis-cli 2.首先用賬號密

移動開發----計算快取大小並且快取

以下的這個類的功能很簡單,計算你的快取總大小,不管內部快取還是外部快取,和清空快取,包括內部和外部的快取一起清空,請本人親測,效果槓槓的。 public class DataCleanManager { public static String getTotalC

微信瀏覽器快取(網頁開發)

       微信瀏覽器自帶的瀏覽器快取真心煩,老是有快取,因為開發網頁的需要這裡我在網上找到一個清除快取的方法,親測可用,隨便找一個對話方塊,輸入網址“debugx2.qq.com”,點選訊息中的網址,進入x5除錯頁面,把頁面拉到最底

C++使用string.getline()和cin混合輸入的問題(cin快取

要從控制檯輸入一行字串(可能含空格)的時候,一般常用兩個getline,一個是string裡的,一個是cin裡的 string的getline(cin, str)直接把輸入存到string物件中,更為方便(cin的getline接受的是*char) 若要求先輸入一行(

c--getchar() 快取

getchar() 該函式的原型為: # include <stdio.h> int getchar(void); 功能是從緩衝區中讀取一個字元。這個函式非常簡單,連引數都沒有,非常好用。下面用 scanf 給字元變數賦值和吸收回車的程式用 getchar() 修改一下:

response.setHeader強制快取和強制過期

response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); respons

【Hibernate學習筆記】Session快取與清理快取

1. 清空快取     當呼叫session.evict(customer); 或者session.clear(); 或者session.close()方法時,Session的快取被清空。 2. 清理快取     Session具有一個快取,位於快取中的物件處於持久化狀態

session清理快取的理解和如何快取中的資料

尊重版權:http://blog.sina.com.cn/s/blog_62a151be0100nf28.html Session執行一些sql語句把記憶體中的物件的狀態同步到資料庫,這個過程被稱為session清理. 在預設情況下,Session會在下面的時間點清理

ionic專案登出時快取資訊

cordova+ionic專案,測試的時候遇到了這麼個問題,當我登出後再重新登入的時候(不關閉APP),頁面中依然儲存著快取資訊,例如:超連結點選後改變的樣式登出後再登入依然存在,如果只是樣式出錯那還只是小問題,畢竟不影響功能。可惜,這不僅會影響樣式,它還會導致你的導航,ta

【JAVA學習】session 清理快取的理解 和 如何 快取中的資料

尊重版權:http://blog.sina.com.cn/s/blog_62a151be0100nf28.html Session執行一些sql語句把記憶體中的物件的狀態同步到資料庫,這個過程被稱為session清理. 在預設情況下,Session會在下面的時間點清理

退出cookie

//退出 //控制從哪個頁面跳過來的             if (Request.UrlReferrer != null)                 urlrefer = Request.UrlReferrer.ToString() + ""

C語言之快取

在C語言中,我們常常需要去清空快取區,對於快取區清空的重要性,接下來我們進行具體的說明。 首先我們先解釋一下快取區。 1.快取區 C語言中的緩衝區又稱為快取,它是記憶體空間的一部分。   也就是說,在記憶體空間中預留了一定的儲存空間,這些儲存空間用來

memcached和redis中快取

memcached: 命令列使用 flush_all 將所有的資料都設定為過期,但記憶體空間不釋放 redis: 命令列使用   (1)  flush all  刪除所有資料庫的所有key (2)  flushdb 刪除當前庫或所選庫的所有key

Thinkphp5-Cache::clear()快取在的問題解決

TP5使用檔案快取使用 Cache::clear(); 在Linux系統上面清除所有快取時 存在的問題(window下用這個呼叫沒有問題)在檔案\thinkphp\library\think\cach