解決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 ,采用默認(rèn)的
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)建完默認(rèn)的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 集成進(jìn)項目:
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>
至此問題解決。
@Override public void onExpiration(Session session)
onExpiration 方法不調(diào)用的問題, 此方法是通過上面的定時任務(wù)提醒來進(jìn)行觸發(fā)的。

由于,redis 和ehcache 本身設(shè)置了過期時間,過期之后 session 變從 redis 后者ehcache 里面刪除,因此 onExpiration 過期之后此方法 永遠(yuǎn)不會被調(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ū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
Druid關(guān)閉監(jiān)控頁面關(guān)閉不了的問題及解決
這篇文章主要介紹了Druid關(guān)閉監(jiān)控頁面關(guān)閉不了的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05

