一般我们的 session 会话过期时间默认为 30 分钟,有的用户认为 30 分钟太短了,有时候临时有事出去了,回来已经过期了,工作还没完成就只能登出了,非常不方便,于是要求我们改变 session 的过期时间
- 1、指定本系统 sessionid
/**
* 指定本系统sessionid, 问题: 与servlet容器名冲突, 如jetty, tomcat 等默认jsessionid,
* 当跳出shiro servlet时如error-page容器会为jsessionid重新分配值导致登录会话丢失!
*
* @return
*/
@Bean
public SimpleCookie sessionIdCookie() {
SimpleCookie simpleCookie = new SimpleCookie("shiro.session");
// 防止xss攻击,窃取cookie内容
simpleCookie.setHttpOnly(true);
return simpleCookie;
}
指定了本地的 session 的 key 为 shiro.session,便于单独管理
- 2、配置 session 管理器
/**
* 会话管理
* 默认使用容器session,这里改为自定义session
* session的全局超时时间默认是30分钟
*
* @return
*/
@Bean
public DefaultWebSessionManager sessionManager() {
DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
// 会话超时时间,单位:毫秒
sessionManager.setGlobalSessionTimeout(60 * 60 * 1000);
// 定时清理失效会话, 清理用户直接关闭浏览器造成的孤立会话
sessionManager.setSessionValidationInterval(60 * 60 * 1000);
// 是否开启定时清理失效会话
sessionManager.setSessionValidationSchedulerEnabled(true);
// 指定sessionid
sessionManager.setSessionIdCookie(sessionIdCookie());
// 是否允许将sessionId 放到 cookie 中
sessionManager.setSessionIdCookieEnabled(true);
// 是否允许将 sessionId 放到 Url 地址拦中
sessionManager.setSessionIdUrlRewritingEnabled(false);
// 默认使用MemerySessionDao,设置为EnterpriseCacheSessionDAO以配合ehcache实现分布式集群缓存支持
sessionManager.setSessionDAO(new EnterpriseCacheSessionDAO());
return sessionManager;
}
设置了过期时间为 60 * 60 * 1000 = 60 分钟,即表示用户 60 分钟无操作后,会话就会过期
- 3、配置安全管理器
/**
* 安全管理器
*/
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
// 设置自定义的relam
securityManager.setRealm(loginRelam());
// 设置session管理器
securityManager.setSessionManager(sessionManager());
return securityManager;
}
如您在阅读中发现不足,欢迎留言!!!