解決shiro 定時(shí)監(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è)置定時(shí)檢測session失效
shiro配置session失效時(shí)間,沒有引用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)點(diǎ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)項(xiàng)目:
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>
至此問題解決。
@Override public void onExpiration(Session session)
onExpiration 方法不調(diào)用的問題, 此方法是通過上面的定時(shí)任務(wù)提醒來進(jìn)行觸發(fā)的。
由于,redis 和ehcache 本身設(shè)置了過期時(shí)間,過期之后 session 變從 redis 后者ehcache 里面刪除,因此 onExpiration 過期之后此方法 永遠(yuǎn)不會被調(diào)用到。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SSH框架網(wǎng)上商城項(xiàng)目第19戰(zhàn)之訂單信息級聯(lián)入庫以及頁面緩存問題
這篇文章主要介紹了SSH框架網(wǎng)上商城項(xiàng)目第19戰(zhàn)之訂單信息級聯(lián)入庫以及頁面緩存問題,感興趣的小伙伴們可以參考一下2016-06-06@Configuration與@Component作為配置類的區(qū)別詳解
這篇文章主要介紹了@Configuration與@Component作為配置類的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06很簡單的Java斷點(diǎn)續(xù)傳實(shí)現(xiàn)原理
這篇文章主要以實(shí)例的方式為大家詳細(xì)介紹了簡單的Java斷點(diǎn)續(xù)傳實(shí)現(xiàn)原理,感興趣的小伙伴們可以參考一下2016-07-07SpringBoot自動(dòng)裝配之@Import深入講解
由于最近的項(xiàng)目需求,需要在把配置類導(dǎo)入到容器中,通過查詢,使用@Import注解就能實(shí)現(xiàn)這個(gè)功能,@Import注解能夠幫我們吧普通配置類(定義為Bean的類)導(dǎo)入到IOC容器中2023-01-01Druid關(guān)閉監(jiān)控頁面關(guān)閉不了的問題及解決
這篇文章主要介紹了Druid關(guān)閉監(jiān)控頁面關(guān)閉不了的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05