用EhCache缓存Shiro的本地会话,当用户没有安全退出就直接关闭浏览器,会话可能在缓存里孤立的问题。
来源:互联网 发布:优化方案系列丛书答案 编辑:程序博客网 时间:2024/05/21 10:57
hiro 的部分配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<
bean
id
=
"securityManager"
class
=
"org.apache.shiro.web.mgt.DefaultWebSecurityManager"
>
<
property
name
=
"sessionMode"
value
=
"native"
/>
<
property
name
=
"cacheManager"
ref
=
"cacheManager"
/>
<
property
name
=
"sessionManager"
ref
=
"sessionManager"
/>
<
property
name
=
"realm"
ref
=
"shiroDbRealm"
/>
</
bean
>
<
bean
id
=
"cacheManager"
class
=
"org.apache.shiro.cache.ehcache.EhCacheManager"
/>
<
bean
id
=
"sessionValidationScheduler"
class
=
"org.apache.shiro.session.mgt.ExecutorServiceSessionValidationScheduler"
>
<
property
name
=
"interval"
value
=
"1800000"
/>
</
bean
>
<
bean
id
=
"sessionManager"
class
=
"org.apache.shiro.web.session.mgt.DefaultWebSessionManager"
>
<
property
name
=
"sessionDAO"
ref
=
"sessionDAO"
/>
<
property
name
=
"globalSessionTimeout"
value
=
"3600000"
/>
<
property
name
=
"sessionValidationScheduler"
ref
=
"sessionValidationScheduler"
/>
<
property
name
=
"sessionValidationSchedulerEnabled"
value
=
"true"
/>
</
bean
>
<
bean
id
=
"shiroFilter"
class
=
"org.apache.shiro.spring.web.ShiroFilterFactoryBean"
>
<
property
name
=
"securityManager"
ref
=
"securityManager"
/>
<
property
name
=
"loginUrl"
value
=
"/login"
/>
<
property
name
=
"successUrl"
value
=
"/system"
/>
<
property
name
=
"unauthorizedUrl"
value
=
"/login?unauthorized"
/>
<
property
name
=
"filterChainDefinitions"
>
<
value
>
/login = authc
...
</
bean
>
用户登录后没有安全退出就直接关闭浏览器后,有两种可能:
1) 用户就是想退出,且没有在会话超时时间内再次登录。缓存中孤立会话在超时后,被一个定时任务清理掉。
2) 用户误关闭了浏览器。这种情况下,用户会再次登录。此时因为上次的会话还存在,所以不会去执行FormAuthenticationFilter,也就不会跳转到successUrl,而是会执行登录页面中form的post action。
我就想到了两种解决方法:
1) 显示登录页面的 get /login 方法里,判断会话,有就安全退出
1
2
3
4
5
6
7
@RequestMapping
(value =
"/login"
, method = RequestMethod.GET)
public
String loginInit() {
if
(SecurityUtils.getSubject().getSession() !=
null
) {
SecurityUtils.getSubject().logout();
}
return
"login"
;
}
2) 写在post /login 里。
不知道各位有没有更好的方法?
0 0
- 用EhCache缓存Shiro的本地会话,当用户没有安全退出就直接关闭浏览器,会话可能在缓存里孤立的问题。
- 将 Shiro 作为应用的权限基础 七:缓存Shiro本地会话
- Shiro + EHCache 缓存的使用
- shiro安全框架异常退出没有清除缓存信息处理方案
- ehcache.xml及结合shiro缓存的ehcache的配置文件
- Ehcache缓存的清理问题
- 开发中遇到Js缓存问题。和页面会话级别的缓存。
- 如何知道用户关闭浏览器,结束会话?
- JSP用户安全退出【清除浏览器缓存中页面】
- centos5.5开机登录后提示“您的会话只持续了不到10秒钟,如果您没有注销,就意味着安装可能出现了问题”
- AJAX的浏览器缓存关闭
- ssh非正常关闭后,在会话中启动的进程会被强制退出
- shiro的会话管理器SessionManager
- shiro的会话工厂SessionFactory
- Shiro EHCache缓存配置
- Shiro缓存整合EhCache
- 关于Ehcache集群缓存在应用重启后的加载问题
- shiro安全框架扩展教程--异常退出没有清除缓存信息处理方案
- Apache Shiro 退出
- 49-UIWindow原理
- leetcode 之Excel Sheet Column Title
- 50-main.storyboard底层,通过storyboard创建控制器
- 右键添加打开终端的命令
- 用EhCache缓存Shiro的本地会话,当用户没有安全退出就直接关闭浏览器,会话可能在缓存里孤立的问题。
- C#反射实例化类并调用带参数的方法
- 51-ViewController的view的创建,使用init或initWithNibName方法加载xib的底层实现(图解)
- 苗条的生长树slim span,uva1395——最小生成树,kruskal
- 黑马程序员-⑧bolck类型和协议protocol的用法
- javascript中screenXY、clientXY、pageXY和offsetXY的区别
- web.xml 报错
- 20HOOK钩子和ADO
- 一键清理VC工程垃圾