shiro中如何检测session失效、退出等事件
前言
我们知道shiro是一个优秀的web权限管理的优秀框架,shiro中实现了对用户登录、资源访问控制等功能,使用shiro能够让我们的应用web系统更加安全,同时降低了自己开发一套权限管理系统的代价;本篇文章想向读者介绍的是我们如何在使用shiro框架时,实现对用户session登录、登出等事件的监听,以便应用系统更好的实现对用户事件的管理。
一、shiro中的session是什么?
首先我们要明确shiro中的session和传统的httpSession不是一个东西,shiro中的session是shiro框架自己实现的一个用户会话管理器,做到和httpSession一样存储登录用户信息,用户登出后清除等功能。
如果在shiro框架中实现对session的管理和控制,需要我们自己实现sessioinManager,即session会话管理类,本文引用的是shiro框架中包含的一个基础的会话管理功能作介绍,抛砖引玉,读者可以根据它的使用方式定义更多功能自己的实现类。
二、使用代码
1.自定义sessionManager
@Bean
public SessionManager memeryManager(
@Qualifier(value = "memoryCacha")
CacheManager cacheManager) {
DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
sessionManager.setSessionDAO(new MemorySessionDAO());
sessionManager.setCacheManager(cacheManager);
// 局会话超时时间(单位毫秒),默认30分钟
sessionManager.setGlobalSessionTimeout(sessionTimeOut * 1000);
sessionManager.setSessionValidationInterval(sessionTimeOut * 1000);
// 取消登录成功后url 后面的 JSESSIONID
sessionManager.setSessionIdUrlRewritingEnabled(false);
// 删除过期的session
sessionManager.setDeleteInvalidSessions(true);
// 定时检测session过期,10s检测一次
sessionManager.setSessionValidationSchedulerEnabled(true);
ExecutorServiceSessionValidationScheduler validationScheduler = new ExecutorServiceSessionValidationScheduler(
sessionManager);
validationScheduler.setInterval(sessionInterval);
sessionManager.setSessionValidationScheduler(validationScheduler);
sessionManager.setSessionListeners(Collections.singleton(listener));
return sessionManager;
}
2.代码运行效果
总结
如下我们就实现了对shiro的session进行活动监控,这样我们可以实现用户自动登出、登出后的相关信息清除。可通过
shiroFilterFactoryBean.getFilters().put("authc", new BaseFormAuthenticationFilter());
控制session失效后页面跳转地址或做其他的pv/uv统计操作。