shiro安全框架异常退出没有清除缓存信息处理方案
来源:互联网 发布:英文大数据翻译 编辑:程序博客网 时间:2024/05/22 00:19
最近项目遇到问题,shiro框异常退出没有清除缓存信息,服务器重启后,又拿旧的缓存session来登录,造成后台报错。
这里转载网友的文章,记录一下解决方法。大体就是重写sessionManager类,做一个清除操作。
配置默认会话管理器:
<bean id="sessionManager" class="com.xzjc.common.security.SimpleWebSessionManager"><property name="globalSessionTimeout" value="15000" /><property name="sessionValidationInterval" value="30000" /><property name="sessionValidationSchedulerEnabled" value="true" /></bean>
全局的会话信息设置成15秒,检测扫描信息间隔30秒,第三个参数就是是否开启扫描
重写管理器类的一个方法
package com.xzjc.common.security;import java.util.Collection;import java.util.Iterator;import org.apache.log4j.Logger;import org.apache.shiro.cache.CacheManager;import org.apache.shiro.session.ExpiredSessionException;import org.apache.shiro.session.InvalidSessionException;import org.apache.shiro.session.Session;import org.apache.shiro.session.mgt.DefaultSessionKey;import org.apache.shiro.session.mgt.SessionKey;import org.apache.shiro.session.mgt.SimpleSession;import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;/** * 会话管理器,重写 * @author zhouyujie */public class SimpleWebSessionManager extends DefaultWebSessionManager {private CacheManager cacheManager;private final static Logger logger = Logger.getLogger(SimpleWebSessionManager.class);public SimpleWebSessionManager() {super();}public void validateSessions() {if (logger.isInfoEnabled()){logger.info("Validating all active sessions...");}int invalidCount = 0;Collection<?> activeSessions = getActiveSessions();if (activeSessions != null && !activeSessions.isEmpty()) {for (Iterator<?> i$ = activeSessions.iterator(); i$.hasNext();) {Session session = (Session) i$.next();try {SessionKey key = new DefaultSessionKey(session.getId());validate(session, key);} catch (InvalidSessionException e) {if (cacheManager != null) {SimpleSession s = (SimpleSession) session;if (s.getAttribute("portal.session.id") != null){cacheManager.getCache(null).remove(s.getAttribute("portal.session.id"));}}if (logger.isDebugEnabled()) {boolean expired = e instanceof ExpiredSessionException;String msg = (new StringBuilder()).append("Invalidated session with id [").append(session.getId()).append("]").append(expired ? " (expired)" : " (stopped)").toString();logger.debug(msg);}invalidCount++;}}}if (logger.isInfoEnabled()) {String msg = "Finished session validation.";if (invalidCount > 0){msg = (new StringBuilder()).append(msg).append("[").append(invalidCount).append("] sessions were stopped.").toString();}else{msg = (new StringBuilder()).append(msg).append("No sessions were stopped.").toString();}logger.info(msg);}}public void setCacheManager(CacheManager cacheManager) {this.cacheManager = cacheManager;}}
这样就好使了。
阅读全文
0 0
- shiro安全框架异常退出没有清除缓存信息处理方案
- shiro安全框架扩展教程--异常退出没有清除缓存信息处理方案
- shiro安全框架扩展教程--异常退出没有清除缓存信息处理方案
- shiro安全框架扩展教程--异常退出没有清除缓存信息处理方案
- shiro安全框架扩展教程--如何扩展realm桥接器并退出自动清空角色资源缓存
- 用EhCache缓存Shiro的本地会话,当用户没有安全退出就直接关闭浏览器,会话可能在缓存里孤立的问题。
- JSP用户安全退出【清除浏览器缓存中页面】
- Apache Shiro(安全框架)
- shiro安全框架
- 安全框架Apache Shiro
- Shiro安全框架入门
- 安全框架shiro
- shiro安全框架
- 安全框架-Shiro
- Shiro 安全框架
- shiro安全框架笔记
- Shiro安全框架
- 安全框架--shiro
- python文件操作
- Android Studio 3.0提示gradle版本过低的解决办法
- 下载程序时出现 Contents mismatch at: 00058000H (Flash=00H Required=04H)
- 回归模型-线性回归算法
- 算法day03
- shiro安全框架异常退出没有清除缓存信息处理方案
- Linux 下wifi 驱动开发(一)—— WiFi基础知识解析
- linux下命令执行时间统计工具time使用小结
- 快速搭建maven管理的web项目
- 电子邮件控件Aspose.Email V17.9发布 | 附下载
- 表单向后台提交数据,get和post的两种方式的根本区别以及如何处理乱码?
- PAT (Basic Level) Practise (中文) 1053. 住房空置率 (20)
- NSTimer 计时器
- 一致性哈希算法(consistent hashing)