shiro 每次请求都会新建会话,创建session
在Servlet容器中,默认使用JSESSIONID Cookie维护会话如下配置了domain[html] viewplain copybean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie"> 当跳出SHIRO S
·
在使用shiro的时候,曾经有段时间很苦恼,因为我cookie的sessionId经常无故被改,然后抛There is no session with id [xxxx]的异常。我们知道,当请求过来,shiro创建session后,会把sessionId写回到客户端的cookie中。每二个请求过来时,shiro会拿到这个cookie里的sessionId去查找,如果查找不到,就有可能抛There is no session with id的异常。通过抛这个异常的会有两种情况,一种就是我刚才说的,cookie被改写了,因为shiro默认的cookie名叫JSESSIONID,当在web.xml里配置的请求拦截配得不合理时,就有可能被改写。在我的项目中,因为有些静态资源配置了不拦截,就会被容器改写了这个cookie。后来,干脆把cookie的名字改了,不再叫JSESSIONID。还有一种就是浏览器打开很久都没有操作,然后shiro定时清理了不活动的session,这时浏览器再发请求过来,因为session已被清理,也会抛There is no session with id。更改cookie的名字方法如下:
<bean id="shiroSessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
<property name="sessionDAO" ref="sessionDAO"/>
<!-- <property name="sessionValidationScheduler" ref="shiroSessionValidationScheduler"/> -->
<property name="sessionValidationInterval" value="1800000"/> <!-- 相隔多久检查一次session的有效性 -->
<property name="globalSessionTimeout" value="1800000"/> <!-- session 有效时间为半小时 (毫秒单位)-->
<property name="sessionIdCookie.domain" value=".xxx.com"/>
<property name="sessionIdCookie.name" value="jsid"/>
<property name="sessionIdCookie.path" value="/"/>
<!-- <property name="sessionListeners">
<list>
<bean class="com.concom.security.interfaces.listener.SessionListener"/>
</list>
</property> -->
更多推荐
已为社区贡献2条内容
所有评论(0)