springboot整合shiro的session问题UnknownSessionException: There is no session with id

Spring Boot+Shiro+redis报UnknownSessionException:There is no session with id(redis中session失效导致异常) 首先此异常是在 (源码解析)(解决方法在最后。。) org.apache.shiro.session.mgt.eis.AbstractSessionDAO的readSession方法中抛出的异常 public Session readSession(Serializable sessionId) throws UnknownSessionException { Se... 阅读详情

报错信息如下

[2018-12-19 02:25:13.852][http-nio-8077-exec-8][DEBUG][org.apache.shiro.web.servlet.SimpleCookie][389]:Found 'SHRIOSESSIONID' cookie value [2387e612-1c34-44b5-b00f-faa2937e2c7f]
[2018-12-19 02:25:13.853][http-nio-8077-exec-8][DEBUG][org.apache.shiro.mgt.DefaultSecurityManager][447]:Resolved SubjectContext context session is invalid.  Ignoring and creating an anonymous (session-less) Subject instance.
org.apache.shiro.session.UnknownSessionException: There is no session with id [2387e612-1c34-44b5-b00f-faa2937e2c7f]
	at org.apache.shiro.session.mgt.eis.AbstractSessionDAO.readSession(AbstractSessionDAO.java:170) ~[shiro-core-1.3.1.jar:1.3.1]
	at org.apache.shiro.session.mgt.eis.CachingSessionDAO.readSession(CachingSessionDAO.java:261) ~[shiro-core-1.3.1.jar:1.3.1]
	at org.apache.shiro.session.mgt.DefaultSessionManager.retrieveSessionFromDataSource(DefaultSessionManager.java:236) ~[shiro-core-1.3.1.jar:1.3.1]
	at org.apache.shiro.session.mgt.DefaultSessionManager.retrieveSession(DefaultSessionManager.java:222) ~[shiro-core-1.3.1.jar:1.3.1]
	at org.apache.shiro.session.mgt.AbstractValidatingSessionManager.doGetSession(AbstractValidatingSessionManager.java:118) ~[shiro-core-1.3.1.jar:1.3.1]
	at org.apache.shiro.session.mgt.AbstractNativeSessionManager.lookupSession(AbstractNativeSessionManager.java:148) ~[shiro-core-1.3.1.jar:1.3.1]
	at org.apache.shiro.session.mgt.AbstractNativeSessionManager.getSession(AbstractNativeSessionManager.java:140) ~[shiro-core-1.3.1.jar:1.3.1]
	at org.apache.shiro.mgt.SessionsSecurityManager.getSession(SessionsSecurityManager.java:156) ~[shiro-core-1.3.1.jar:1.3.1]
	at org.apache.shiro.mgt.DefaultSecurityManager.resolveContextSession(DefaultSecurityManager.java:456) ~[shiro-core-1.3.1.jar:1.3.1]
	at org.apache.shiro.mgt.DefaultSecurityManager.resolveSession(DefaultSecurityManager.java:442) [shiro-core-1.3.1.jar:1.3.1]
	at org.apache.shiro.mgt.DefaultSecurityManager.createSubject(DefaultSecurityManager.java:338) [shiro-core-1.3.1.jar:1.3.1]
	at org.apache.shiro.subject.Subject$Builder.buildSubject(Subject.java:846) [shiro-core-1.3.1.jar:1.3.1]
	at org.apache.shiro.web.subject.WebSubject$Builder.buildWebSubject(WebSubject.java:148) [shiro-web-1.3.1.jar:1.3.1]
	at org.apache.shiro.web.servlet.AbstractShiroFilter.createSubject(AbstractShiroFilter.java:292) [shiro-web-1.3.1.jar:1.3.1]
	at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:359) [shiro-web-1.3.1.jar:1.3.1]
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) [shiro-web-1.3.1.jar:1.3.1]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:83) [druid-1.1.5.jar:1.1.5]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) [spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108) [spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81) [spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) [spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_161]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_161]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.23.jar:8.5.23]
	at java.lang.Thread.run(Thread.java:748) [?:1.8.0_161]

报错原因分析

Shiro 框架中的 SessionManager 默认实现为 DefaultWebSessionManager,DefaultWebSessionManager的构造方法如下

public DefaultWebSessionManager() {

         Cookie cookie = new SimpleCookie(ShiroHttpSession.DEFAULT_SESSION_ID_NAME);

         cookie.setHttpOnly(true); //more secure, protects against XSS attacks

         this.sessionIdCookie = cookie;

         this.sessionIdCookieEnabled = true;

         this.sessionIdUrlRewritingEnabled = true;

    }

其中Cookie使用的是 SimpleCookie,SimpleCookie构造用的名字为 ShiroHttpSession.DEFAULT_SESSION_ID_NAME,追踪可以看到

public static final String DEFAULT_SESSION_ID_NAME = "JSESSIONID";

也就是说Shiro 框架中的 SessionManager的默认实现 DefaultWebSessionManager,使用的Cookie的名称为 "JSESSIONID" ,与SERVLET容器(如JETTY, TOMCAT)默认的Cookie名冲突了,当跳出SHIRO SERVLET时如ERROR-PAGE容器会为JSESSIONID重新分配值导致登录会话丢失。

修改一下shiroconfig配置:

修改方式为SHRIOSESSIONID–>shiro.sesssion

//自定义session管理器
@Bean
    public SessionManager sessionManager() {
        ShiroSessionManager customDefaultWebSessionManager = new ShiroSessionManager();
        customDefaultWebSessionManager.setSessionDAO(new PmsSessionDao());
        Collection<SessionListener> listeners = new ArrayList<>();
        listeners.add(new PmsSessionListener());
        customDefaultWebSessionManager.setSessionListeners(listeners);
        customDefaultWebSessionManager.setSessionFactory(new PmsSessionFactory());
        customDefaultWebSessionManager.setSessionIdCookie(sessionIdCookie());//设置SimpleCookie
        return customDefaultWebSessionManager;
    }

    @Bean(name = "simpleCookie")
    public SimpleCookie sessionIdCookie() {
        //DefaultSecurityManager
        SimpleCookie simpleCookie = new SimpleCookie();
        //sessionManager.setCacheManager(ehCacheManager());
        //如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。
        simpleCookie.setHttpOnly(true);
//		simpleCookie.setName("SHRIOSESSIONID");
        simpleCookie.setName("shiro.sesssion");
        //单位秒
        simpleCookie.setMaxAge(3600);
        return simpleCookie;
    }

大致就这样解决了

Spring boot + shiro + redis 实现session共享(伪单点登录)     为实现Web应用的分布式集群部署,要解决登录session的统一。本文利用shiro做权限控制,redis做session存储,结合spring boot快速配置实现session共享。注意本文未解决跨域的问题。不过对于一般的情况能够很好的起到作用,具体已经在不同端口上进行了测试。    我们先从配置说起:1.引入相关依赖引入shiro相关的依赖还有Redis的依赖 ... 阅读详情

相关推荐

RK806S PMIC电源管理芯片调试

当点按PWRON按键时,rk806上电开始启动bootloader和uboot,在执行到此处时检测到是由于按键启动的,所以0x5d的值是0x80,0x74的值是0x80,在一般情况下,mode都默认是none的,所以mode值为11,因此就进入了我们的if判断,若是由于按键启动的,则直接调用rk8xx_shutdown函数关掉,进入这个函数会看到实际是通过i2c给0x72寄存器的BIT(0)写1,使其关机。当SoC在12V电源已经接入,且处于关机状态时,使用PWRON按键开机,0x74的值则为0x80。

Y1anoohh的博客 2546

开启多线程,shiro报错:UnknownSessionException: There is no session with id

开启多线程,shiro报错:UnknownSessionException: There is no session with id. 如下所示: org.apache.shiro.session.UnknownSessionException: There is no session with id [c8c5715ea6524f08b2ebe9fcb0566e20] at o...

Cyms,BgXmSfXtsj !!!! Battle Each Moment !!!! 1264

MounRiver避坑实录:手把手迁移CH32V307 EVT工程到自定义目录

本文详细记录了将沁恒CH32V307的EVT工程迁移到自定义目录的完整流程与避坑指南。针对MounRiver Studio的虚拟链接机制,重点讲解了如何清理旧配置、重新设置头文件路径、链接脚本等关键步骤,帮助开发者创建独立、可维护的MCU项目工程。

uber9的博客 244

Shiro + Redis 经常提示 UnknownSessionException:There is no session with id [XXX]

背景:整合Shiro和redis后,经常会提示There is no session with id报错,但不影响运行。 框架:使用的是shiro-redis框架。 解决方案:重新DefaultWebSessionManager 类的getSessionId 方法,在里面加上 session 是否过期的判断,如果过期就返回 null。 @Override protected Serializable getSessionId(ServletRequest request, Ser..

良月柒 2243

配置思科交换机冗余链路汇聚

本文对交换机端口汇聚配置进行说明

istrangeboy&begin zero的博客 6686

PCL 最小生成树用于法向量定向【2025最新版】

PCL 最小代价生成树用于点云法向量的定向。博客长期更新,本文最近更新时间为:2025年9月15日。

点云侠的博客 2068

shiro多线程导致org.apache.shiro.session.UnknownSessionException: There is no session with id

shiro配置了以下内容还是报了第一次执行多线程任务成功,退出登录再执行,则报了。

weixin_43205308的博客 2129

【数据集】1980-2020年(5年)土地利用分类数据-中国科学院

简介1980-2020年每五年土地利用数据-中国科学院

WW、forever的博客 3936

springboot整合shiro的session问题UnknownSessionException There is no session with id

报错信息如下 [2018-12-19 02:25:13.852][http-nio-8077-exec-8][DEBUG][org.apache.shiro.web.servlet.SimpleCookie][389]:Found 'SHRIOSESSIONID' cookie value [2387e612-1c34-44b5-b00f-faa2937e2c7f] [2018-12-19 02:25:13.853][http-nio-8077-exec-8][DEBUG][org.apache.shiro

web15286201346的博客 866

Oracle 11g安装教程(保姆级超详细安装教程)

Oracle详细安装步骤,每一步都配有图例引导 ORACLE是数据库(Oracle服务端)。是连接数据库的客户端(Oracle客户端)。是连接oracle的可视化客户端软件。

2302_81846649的博客 1万+

7、农业市场价格预测与K-Means聚类算法的综合研究

本文综合研究了农业市场价格预测与K-Means聚类算法的原理、应用及拓展。在农业领域,基于历史数据和供应信息的价格预测模型可为农民、政府和金融机构提供决策支持;在数据处理领域,K-Means算法通过合理选择初始质心和距离度量方法,实现高效聚类分析。文章还探讨了两种技术面临的挑战与解决方案,并展望了其在大数据、人工智能融合背景下的未来发展趋势,展示了跨领域技术协同的应用潜力。

ujm56789012的博客 67

springboot报错org.apache.shiro.session.UnknownSessionException: There is no session with id [XXX]问题解决

在springboot项目使用多线程的时候经常报 根据网上的说法是因为在shiro的DefaultWebSessionManager类中,默认Cookie名称是JSESSIONID,这样的话与servlet容器名冲突, 如jetty, tomcat等默认JSESSIONID, 当跳出shiro servlet时如error-page容器会为JSESSIONID重新分配值导致登录会话丢失! ...

菜鸟小木干的博客 1万+

STM32CubeMX之DAC产成正弦波

“在之前的文章中曾经介绍过用TIM产生PWM做DAC用,STM32定时器输出PWM做DAC。部分型号的STM32单片机内部有专用的DAC,本篇文章将介绍如何用内部DAC+DMA产生正弦波...

zhang062061的专栏 1513

org.apache.shiro.session.UnknownSessionException: There is no session with id [XXXX]

背景:使用Springboot+Shiro+EhCache时,Session中取不出值,也就是没有缓存上 解决办法:在ShiroConfig中的安全管理器中设置Session管理器 session管理器的代码为: @Bean public OnlineWebSessionManager sessionManager() { OnlineWebSessionM...

LI_AINY的博客 3315

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

org.apache.shiro.session.UnknownSessionException: There is no session with id [xxxx]的解决方案

org.apache.shiro.session.UnknownSessionException: There is no session with id [xxxx]的解决方案 背景描述 SpringBoot项目,使用Shiro进行权限管理。测试过程中发现执行文件导入时最开始一切正常,但是导入几次之后再次执行导入就会报错,此时执行其他功能一切正常 排查过程 [x] 1. 网上搜索,...

weixin_30648587的博客 2275

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

org.apache.shiro.session.UnknownSessionException: There is no session with id [xxxx]

springboot整合shiro缓存时报错 org.apache.shiro.session.UnknownSessionException: There is no session with id [xxxx] 解决: 1.更改cookie名称为 token 2.设置cookie过期时间与session过期时间一致 3.退出登录时清空cookie ...

weixin_43355440的博客 1365

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

org.apache.shiro.session.UnknownSessionException: There is no session with id[xx]

问题背景: 借鉴开涛的shiro教程,自己动手实验下,关于第16章,使用的框架是shiro+spring MVC+maybatis,一启动就直接抛这个异常。 解决办法: 1, 配置文件 中关于Bean:securityManager中property为sessionManager注释掉即可。(不可取) 2, 因sessionManager受CacheManager,而项

sprs的博客 7416

shrio报错"org.apache.shiro.session.UnknownSessionException: There is no session with id [e239e76d-012d

登陆退出跳转后报异常,原因是shiro拦截器中,退出的URL配置了anon(匿名) filterChainDefinitionMap.put("/logout", "anon"); 解决:应该配置成logout(退出) filterChainDefinitionMap.put("/logout", "logout");

nolin1234的专栏 2686

解决Shiro+SpringBoot异步任务长时间运行导致的UnknownSessionException错误问题

当Springboot的异步任务运行时长超过了Shiro设置的超时时间后,会造成Session异常,最终导致数据无法插入到数据库等其他问题; 2021-07-06 16:03:21.675 WARN 20823 --- [ task-2] c.l.a.v.service.impl.AsyncServiceImpl : [OUDWRN][1999/2000]转储数据失败:EscrowVideo{title='null', desc='" #fyp"'}; 原因:There is

adinlead的博客 1148

Shiro 通过处理session,实现一个账号只能一处登录问题

文章目录1. 问题2. 原因3. 解决 1. 问题 在处理一个账号只能一处登录时,登录会出现异常,如下 14:51:44.689] DEBUG org.springframework.web.servlet.FrameworkServlet 991 processRequest - Could not complete request org.apache.shiro.session.Unknow...

爱折腾的Albert 2832

SpringBoot系列教程(五)整合Shiro进行权限控制

本文采用shiro-spring-boot-starter方式将Shiro集成到SpringBoot开发环境中,对于Shiro不做过多的功能介绍。 1.引入相关依赖 <!-- Shiro --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring-boot-starter</artifactId> <ver

Lemon 243

Shiro提示org.apache.shiro.session.UnknownSessionException: There is no session with id的问题

Shiro报错

夜白丶的博客 2035

org.apache.shiro.session.UnknownSessionException: There is no session with id [77832ac1-4dbd-4b19-8e

确保在Shiro设置中正确配置了会话管理,包括任何自定义的会话ID Cookie设置或会话存储配置(例如使用EhCache、Redis或数据库)。:在分布式环境中,如果会话复制或集群配置不正确,可能会导致会话在一个服务器上可用而在处理请求的另一服务器上不可用。:如果会话ID被人为修改或生成有误,它将不会对应于Shiro存储中的任何有效会话。:由于长时间未活动或已达到Shiro配置中的最大会话超时时间,会话可能已经过期。:会话存储机制(如缓存、数据库等)的配置不正确可能导致会话未被正确存储或检索。

qq_33240556的博客 1132

[转]解决shiro:There is no session with id

解决org.apache.shiro.session.UnknownSessionException: There is no session with id的问题   只所以出现这个问题是因为在shiro的DefaultWebSessionManager类中,默认Cookie名称是J...

chushengzhu4618的博客 1780

netty整合shiro,报There is no session with id [xxxxxx]问题定位及解决

问题描述: ##### 在做netty和shiro整合测试时,程序启动并正常运行一段时间之后会发现shiro出现异常,异常信息为There is no session with id [xxxxxx]!重启之后可以恢复但是运行一会儿又会出现该情况,由于我这里没有使用shiro的web认证机制,网上一些解决类似此情况的方法无效。以下为我自己排查分析并解决的过程 第一步GC优化 dubugg模式下发现报错的地方为如下所示: ##### 从dubug模式发现,context此时的实例是DefaultSubjec

m0_67393295的博客 486
上一篇: Connection reset by peer的常见原因及解决办法
下一篇: 使用Python3爬虫抓取小说
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值