shiro安全框架擴充套件教程–異常退出沒有清除快取資訊處理方案
自從之前研究了security3一段時間,發現也不咋滴,後來轉行去玩玩shiro,感覺還是挺不錯的,小巧靈活;然後遇到個大家都應該遇到過的問題就是當使用者退出或者異常關閉瀏覽器的時候不會自動清除快取授權資訊,當然shiro是有個玩意會自動掃描過期的會話,但是它只會清除會話資訊不會清除cache裡面的資訊,看了網上的答案都是不靠譜的,最好還是自己看原始碼吧,下面看我的解決方案
<!-- 預設會話管理器 --> <bean id="sessionManager" class="com.shadow.shiro.extend.session.impl.SimpleWebSessionManager"> <property name="globalSessionTimeout" value="15000" /> <property name="sessionValidationInterval" value="30000" /> <property name="sessionValidationSchedulerEnabled" value="true" /> </bean>
全域性的會話資訊設定成15秒,檢測掃描資訊間隔30秒,第三個引數就是是否開啟掃描
至於我的sessionManager實現類是自己繼承,然後重寫了其中一個方法
package com.shadow.shiro.extend.session.impl; import java.util.Collection; import java.util.Iterator; import org.apache.log4j.Logger; import org.apache.shiro.cache.CacheManager; import org.apache.shiro.session.ExpiredSessionException; import org.apache.shiro.session.InvalidSessionException; import org.apache.shiro.session.Session; import org.apache.shiro.session.mgt.DefaultSessionKey; import org.apache.shiro.session.mgt.SessionKey; import org.apache.shiro.session.mgt.SimpleSession; import org.apache.shiro.web.session.mgt.DefaultWebSessionManager; import com.shadow.shiro.extend.session.WebSessionManager; /** * 會話管理器 * * @author shadow * */ public class SimpleWebSessionManager extends DefaultWebSessionManager implements WebSessionManager { private CacheManager cacheManager; private final static Logger logger = Logger .getLogger(SimpleWebSessionManager.class); public SimpleWebSessionManager() { super(); } public void validateSessions() { if (logger.isInfoEnabled()) logger.info("Validating all active sessions..."); int invalidCount = 0; Collection<?> activeSessions = getActiveSessions(); if (activeSessions != null && !activeSessions.isEmpty()) { for (Iterator<?> i$ = activeSessions.iterator(); i$.hasNext();) { Session session = (Session) i$.next(); try { SessionKey key = new DefaultSessionKey(session.getId()); validate(session, key); } catch (InvalidSessionException e) { if (cacheManager != null) { SimpleSession s = (SimpleSession) session; if (s.getAttribute(SESSION_USER_KEY) != null) cacheManager.getCache(null).remove( s.getAttribute(SESSION_USER_KEY)); } if (logger.isDebugEnabled()) { boolean expired = e instanceof ExpiredSessionException; String msg = (new StringBuilder()).append( "Invalidated session with id [").append( session.getId()).append("]").append( expired ? " (expired)" : " (stopped)") .toString(); logger.debug(msg); } invalidCount++; } } } if (logger.isInfoEnabled()) { String msg = "Finished session validation."; if (invalidCount > 0) msg = (new StringBuilder()).append(msg).append(" [").append( invalidCount).append("] sessions were stopped.") .toString(); else msg = (new StringBuilder()).append(msg).append( " No sessions were stopped.").toString(); logger.info(msg); } } public void setCacheManager(CacheManager cacheManager) { this.cacheManager = cacheManager; } }
其中這裡的方法是校驗會話的,我在方法上加入了cachemanager的介面,然後重寫set方法,就能獲得例項,然後在執行期間呼叫cache.remove()方法,就能清空快取上的資訊了;
相關文章
- shiro安全框架擴充套件教程--如何擴充套件實現我們的快取機制(第三方容器redis,memcached)框架套件快取Redis
- JNI異常處理和快取策略快取
- shiro安全框架擴充套件教程–如何防止可執行檔案的入侵攻擊框架套件
- 3大問題!Redis快取異常及處理方案總結Redis快取
- nodejs程式異常退出處理方法NodeJS
- 解決“當前擴充套件快取策略沒有進行註冊”的錯誤套件快取
- PHP擴充套件快取加速安裝PHP套件快取
- 自動化時序異常檢測的可擴充套件通用框架套件框架
- 異常錯誤資訊處理
- 異常以及異常處理框架探析框架
- shiro安全框架擴充套件教程–設計資料物件校驗器,如何防止xss以及csrf攻擊框架套件物件
- 清除DNS快取資訊方法DNS快取
- PHP 7.3.8 安裝 ext-Redis 擴充套件 報錯處理方案PHPRedis套件
- JMeter 擴充套件開發:擴充套件 TCP 取樣器JMeter套件TCP
- 使用觀察者模式處理異常資訊模式
- 異常篇——異常處理
- Java培訓簡述如何處理沒有被捕獲的異常Java
- [許可權擴充套件] Entrust 快取問題套件Rust快取
- AFNetworking 之 UIKit 擴充套件與快取實現UI套件快取
- Java入門教程十一(異常處理)Java
- Redis快取篇(四)快取異常Redis快取
- Redis 快取常見問題處理Redis快取
- Redis快取的主要異常及解決方案Redis快取
- 異常處理
- 圖片處理擴充套件 Grafika 的簡單使用套件
- 表空間無法擴充套件問題處理套件
- 基於Gin框架實現異常處理框架
- 異常-JDK7針對多個異常的處理方案JDK
- Flutter 異常處理方案——灰度與降級Flutter
- Python xlrd讀取excel異常處理PythonExcel
- java安全編碼指南之:異常處理Java
- 安裝Swoole框架和擴充套件框架套件
- chrome擴充套件推薦:無法無天的圖片內文書處理擴充套件 --- Project NapthaChrome套件ProjectAPT
- Solon詳解(六)- Solon的校驗擴充套件框架使用與擴充套件套件框架
- SpringCloudGateway資料庫儲存路由資訊的擴充套件方案SpringGCCloudGateway資料庫路由套件
- 圖片處理擴充套件 Intervention/image 的簡單使用套件
- 一個簡單的 PHP 時間處理擴充套件PHP套件
- Mysqli擴充套件庫增強—–預處理技術mysqlistmtMySql套件