解决org.apache.shiro.session.UnknownSessionException: There is no session with id的问题

一、背景

  最近在整合了Spring+Shiro+Redis实现tomcat集群session共享的问题之后,发布以后运行以后发现老是会出现:org.apache.shiro.session.UnknownSessionException: There is no session with id [xxxx]的问题,具体问题如下截图:

二、出现这个问题的原因

  只所以出现这个问题是因为在shiro的DefaultWebSessionManager类中,默认Cookie名称是JSESSIONID,这样的话与servlet容器名冲突, 如jetty, tomcat等默认JSESSIONID, 当跳出shiro servlet时如error-page容器会为JSESSIONID重新分配值导致登录会话丢失!

  明白了出现这个问题的原因,就好办了,我们只需要自己指定一个与项目运行容器不冲突的sessionID就好了,具体如下,在spring-shiro.xml中进行如下配置:

 <!--sessionManager -->
 <bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
    <property name="sessionDAO" ref="redisSessionDAO" />
    <property name="sessionIdCookie" ref="simpleCookie"/>
 </bean>

 <bean id="simpleCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
    <constructor-arg name="name" value="shiro.sesssion"/>
    <property name="path" value="/"/>
 </bean>

这样,我们就很完美的解决了这个问题!至于想知道spring+shiro+redis集成实现tomcat集群session共享的童鞋,请移步:Shrio+Redis实现tomcat集群共享session

时间: 2024-08-25 12:10:29

解决org.apache.shiro.session.UnknownSessionException: There is no session with id的问题的相关文章

在 Web 项目中应用 Apache Shiro

Apache Shiro 是功能强大并且容易集成的开源权限框架,它能够完成认证.授权.加密.会话管理等功能.认证和授权为权限控制的核心,简单来说,"认证"就是证明你是谁? Web 应用程序一般做法通过表单提交用户名及密码达到认证目的."授权"即是否允许已认证用户访问受保护资源.关于 Shiro 的一系列特征及优点,很多文章已有列举,这里不再逐一赘述,本文重点介绍 Shiro 在 Web Application 中如何实现验证码认证以及如何实现单点登录. 用户权限模型

[转]在 Web 项目中应用 Apache Shiro

目录[-] 用户权限模型 图 1. 用户权限模型 认证与授权 Shiro 认证与授权处理过程 Shiro Realm 清单 1. 实现自己的 JDBC Realm 为何对 Shiro 情有独钟 与 Spring 集成 Shiro 的安装 配置过滤器 清单 2. web.xml 配置 Spring 配置 清单 3. Spring 配置 实现验证码认证 产生验证码 清单 4. web.xml 配置 扩展 UsernamePasswordToken 清单 5. CaptchaUsernamePassw

Apache shiro集群实现 (六)分布式集群系统下的高可用session解决方案---Session共享

Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro Authentication) Apache shiro集群实现 (四)shiro授权(Authentication)--访问控制 Apache shiro集群实现 (五)分布式集群系统下的高可用session解决方案 Apache shiro集群实现 (六)分布式集群系统下的高可用session

org.apache.shiro.session.InvalidSessionException: java.lang.IllegalStateException: getAttribute: Session already invalidated] with root cause

1.遇到以下异常,找了好长时间,终于解决,报的异常如下: 七月 07, 2017 3:02:16 下午 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.service() for servlet [SpringMVC] in context with path [/IMP] threw exception [org.apache.shiro.session.InvalidSessionException: java.

Apache shiro集群实现 (五)分布式集群系统下的高可用session解决方案

目前,为了使web能适应大规模的访问,需要实现应用的集群部署. 而实现集群部署首先要解决session的统一,即需要实现session的共享机制. 目前,在集群系统下实现session统一的有如下几种方案: (1) 应用服务器间的session复制共享(如tomcat session共享) (2) 基于cache DB缓存的session共享 应用服务器间的session复制共享 session复制共享,主要是指集群环境下,多台应用服务器之间同步session,使session保持一致,对外透明

【Shiro】六、Apache Shiro Session管理

1.Session的介绍 关于Session 会话:从启动一个Session到关闭这个Session作为一个会话,是对客户端和服务器端交互的一种封装,带有时效性 会话的产生: 一般从容器中产生 Web container:Web容器,如Tomcat,这些容器对Session进行了实现,可以产生Session EJB Stateful Session Beans:比较少用 会话的应用: Mobile Web 分布式集群 Shiro Session 基于POJO 可以自定义Session存储的方式,

Apache Shiro系列(1)

Apache Shiro是啥呢,安全框架. 360百科是这么描述的:        Apache Shiro(日语"堡垒(Castle)"的意思)是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理功能,可为任何应用提供安全保障 - 从命令行应用.移动应用到大型网络及企业应用. Shiro为解决下列问题(我喜欢称它们为应用安全的四要素)提供了保护应用的API: 认证 - 用户身份识别,常被称为用户"登录"; 授权 - 访问控制; 密码加密 - 保护或隐

Apache shiro配置与使用(Spring整合)

网络上大部分的博文是关于Apache shiro与Spring MVC的整合,以及使用教程,最近在做一个物流项目的时候使用的是Apache shiro与Spring进行整合,期间遇到了一些问题,花费了一些时间才得到解决,所以本文首先会从介绍shiro框架到理解shiro以及使用shiro框架几个角度进行描述如何正确的使用与理解该框架: 1.权限概述(正确理解认证.授权的基本概念) 2.常见的权限控制的方式(URL拦截的方式.方法注解的方式) 3.权限涉及到的数据表以及模型关系 4.Apache

Apache Shiro 简介(转)

使用 Apache Shiro 为 web 应用程序进行用户身份验证 Shiro 是一个 Apache Incubator 项目,旨在简化身份验证和授权.在本文中,了解 Apache Shiro 并通过示例来在一个 Groovy web 应用程序中尝试使用 Shiro 进行身份验证和授权. Apache Shiro 是一个框架,可用于身份验证和授权.本文提供了几个示例用来展示如何在 Java™ 应用程序中使用 Shiro 并给出了如何在一个 Grails web 应用程序中使用它的概述.为了从本