解决shiro 定时监听器不生效的问题 onExpiration不调用问题

网友投稿 787 2022-12-24

解决shiro 定时-不生效的问题 onExpiration不调用问题

解决shiro 定时-不生效的问题 onExpiration不调用问题

问题

redis 抛出异常:

redis.clients.jedis.ScanResult.getStringCursor()Ljava/lang/String;

Method threw 'java.lang.NoSuchMethodError' exception.

说明

spring-boot 版本

org.springframework.boot

spring-boot-starter-parent

2.4.5

shiro-redis版本

org.crazycake

shiro-redis

3.2.3

jedis版本

shiro设置定时检测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

sYmjnUlOUkySessionManager.setDeleteInvalidSessions(true);

// 定期检查 失效的 session

skySessionManager.setSessionValidationInterval(10000);

// 开启 schedule

skySessionManager.setSessionValidationSchedulerEnabled(true);

skySessionManager.setSessionListeners(Collections.singletonList(new SkySessionListener()));

logger.debug("安全框架配置:结束sessionManager配置");

return skySessionManager;

}

shiro schedule 创建逻辑

问题出现点

当创建完默认的scheduler 后会执行一次 run方法

继续跟踪代码

发现 此处有异常,但是异常并未被捕获,导致线程中断。

网上百度此异常 说是,jedis版本不一致导致。

解决方案

查看shiro-redis pom文件jedis的版本号。

发现jedis版本号为2.9.0

将jedis 2.9.0 集成进项目:

redis.clients

jedis</artifactId>

2.9.0

至此问题解决。

@Override

public void onExpiration(Session session)

onExpiration 方法不调用的问题, 此方法是通过上面的定时任务提醒来进行触发的。

由于,redis 和ehcache 本身设置了过期时间,过期之后 session 变从 redis 后者ehcache 里面删除,因此 onExpiration 过期之后此方法 永远不会被调用到。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:flutter布局有哪些(flutter 布局原理)
下一篇:小程序调用app(小程序调用APP)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~