解決shiro 定時監(jiān)聽器不生效的問題 onExpiration不調(diào)用問題
問題
redis 拋出異常:
redis.clients.jedis.ScanResult.getStringCursor()Ljava/lang/String; Method threw 'java.lang.NoSuchMethodError' exception.
說明
spring-boot 版本
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.5</version> <relativePath/> <!-- lookup parent from repository --> </parent>
shiro-redis版本
<dependency> <groupId>org.crazycake</groupId> <artifactId>shiro-redis</artifactId> <version>3.2.3</version> </dependency>
jedis版本
shiro設(shè)置定時檢測session失效
shiro配置session失效時間,沒有引用shiro-quartz ,采用默認的
ExecutorServiceSessionValidationScheduler
shiro 配置
@Bean public SessionManager sessionManager(SimpleCookie simpleCookie, SessionDAO sessionDAO) { logger.debug("安全框架配置:開始sessionManager配置"); SkySessionManager skySessionManager = new SkySessionManager(); skySessionManager.setSessionDAO(sessionDAO); skySessionManager.setSessionIdCookie(simpleCookie); // 開啟cookie skySessionManager.setSessionIdCookieEnabled(true); // session 失效刪除session skySessionManager.setDeleteInvalidSessions(true); // 定期檢查 失效的 session skySessionManager.setSessionValidationInterval(10000); // 開啟 schedule skySessionManager.setSessionValidationSchedulerEnabled(true); skySessionManager.setSessionListeners(Collections.singletonList(new SkySessionListener())); logger.debug("安全框架配置:結(jié)束sessionManager配置"); return skySessionManager; }
shiro schedule 創(chuàng)建邏輯
問題出現(xiàn)點
當(dāng)創(chuàng)建完默認的scheduler 后會執(zhí)行一次 run方法。
繼續(xù)跟蹤代碼
發(fā)現(xiàn) 此處有異常,但是異常并未被捕獲,導(dǎo)致線程中斷。
網(wǎng)上百度此異常 說是,jedis版本不一致導(dǎo)致。
解決方案
查看shiro-redis pom文件jedis的版本號。
發(fā)現(xiàn)jedis版本號為2.9.0
將jedis 2.9.0 集成進項目:
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>
至此問題解決。
@Override public void onExpiration(Session session)
onExpiration 方法不調(diào)用的問題, 此方法是通過上面的定時任務(wù)提醒來進行觸發(fā)的。
由于,redis 和ehcache 本身設(shè)置了過期時間,過期之后 session 變從 redis 后者ehcache 里面刪除,因此 onExpiration 過期之后此方法 永遠不會被調(diào)用到。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SSH框架網(wǎng)上商城項目第19戰(zhàn)之訂單信息級聯(lián)入庫以及頁面緩存問題
這篇文章主要介紹了SSH框架網(wǎng)上商城項目第19戰(zhàn)之訂單信息級聯(lián)入庫以及頁面緩存問題,感興趣的小伙伴們可以參考一下2016-06-06@Configuration與@Component作為配置類的區(qū)別詳解
這篇文章主要介紹了@Configuration與@Component作為配置類的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06Druid關(guān)閉監(jiān)控頁面關(guān)閉不了的問題及解決
這篇文章主要介紹了Druid關(guān)閉監(jiān)控頁面關(guān)閉不了的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05