- 浏览: 632718 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (819)
- java开发 (110)
- 数据库 (56)
- javascript (30)
- 生活、哲理 (17)
- jquery (36)
- 杂谈 (15)
- linux (62)
- spring (52)
- kafka (11)
- http协议 (22)
- 架构 (18)
- ZooKeeper (18)
- eclipse (13)
- ngork (2)
- dubbo框架 (6)
- Mybatis (9)
- 缓存 (28)
- maven (20)
- MongoDB (3)
- 设计模式 (3)
- shiro (10)
- taokeeper (1)
- 锁和多线程 (3)
- Tomcat7集群 (12)
- Nginx (34)
- nodejs (1)
- MDC (1)
- Netty (7)
- solr (15)
- JSON (8)
- rabbitmq (32)
- disconf (7)
- PowerDesigne (0)
- Spring Boot (31)
- 日志系统 (6)
- erlang (2)
- Swagger (3)
- 测试工具 (3)
- docker (17)
- ELK (2)
- TCC分布式事务 (2)
- marathon (12)
- phpMyAdmin (12)
- git (3)
- Atomix (1)
- Calico (1)
- Lua (7)
- 泛解析 (2)
- OpenResty (2)
- spring mvc (19)
- 前端 (3)
- spring cloud (15)
- Netflix (1)
- zipkin (3)
- JVM 内存模型 (5)
- websocket (1)
- Eureka (4)
- apollo (2)
- idea (2)
- go (1)
- 业务 (0)
- idea开发工具 (1)
最新评论
-
sichunli_030:
对于频繁调用的话,建议采用连接池机制
配置TOMCAT及httpClient的keepalive以高效利用长连接 -
11想念99不见:
你好,我看不太懂。假如我的项目中会频繁调用rest接口,是要用 ...
配置TOMCAT及httpClient的keepalive以高效利用长连接
自从之前研究了security3一段时间,发现也不咋滴,后来转行去玩玩shiro,感觉还是挺不错的,小巧灵活;然后遇到个大家都应该遇到过的问题就是当用户退出或者异常关闭浏览器的时候不会自动清除缓存授权信息,当然shiro是有个玩意会自动扫描过期的会话,但是它只会清除会话信息不会清除cache里面的信息,看了网上的答案都是不靠谱的,最好还是自己看源码吧,下面看我的解决方案
全局的会话信息设置成15秒,检测扫描信息间隔30秒,第三个参数就是是否开启扫描
至于我的sessionManager实现类是自己继承,然后重写了其中一个方法
其中这里的方法是校验会话的,我在方法上加入了cachemanager的接口,然后重写set方法,就能获得实例,然后在执行期间调用cache.remove()方法,就能清空缓存上的信息了;
参考:http://blog.csdn.net/shadowsick/article/details/17265625/
http://blog.csdn.net/shadowsick/article/details/39023315
http://ask.csdn.net/questions/201341
<!-- 默认会话管理器 --> <bean id="sessionManager" class="com.shadow.shiro.extend.session.impl.SimpleWebSessionManager"> <property name="globalSessionTimeout" value="15000" /> <property name="sessionValidationInterval" value="30000" /> <property name="sessionValidationSchedulerEnabled" value="true" /> </bean>
全局的会话信息设置成15秒,检测扫描信息间隔30秒,第三个参数就是是否开启扫描
至于我的sessionManager实现类是自己继承,然后重写了其中一个方法
package com.shadow.shiro.extend.session.impl; 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; import com.shadow.shiro.extend.session.WebSessionManager; /** * 会话管理器 * * @author shadow * */ public class SimpleWebSessionManager extends DefaultWebSessionManager implements WebSessionManager { 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(SESSION_USER_KEY) != null) cacheManager.getCache(null).remove( s.getAttribute(SESSION_USER_KEY)); } 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; } }
其中这里的方法是校验会话的,我在方法上加入了cachemanager的接口,然后重写set方法,就能获得实例,然后在执行期间调用cache.remove()方法,就能清空缓存上的信息了;
参考:http://blog.csdn.net/shadowsick/article/details/17265625/
http://blog.csdn.net/shadowsick/article/details/39023315
http://ask.csdn.net/questions/201341
发表评论
-
SpringMVC整合Shiro权限框架
2017-05-09 23:18 432http://blog.csdn.net/donggua369 ... -
第十九章 动态URL权限控制——《跟我学Shiro》
2017-03-06 22:22 469参考:http://jinnianshilongnian.it ... -
Shiro入门(1)
2017-03-04 23:31 331参考:http://blog.csdn.net/zhengwe ... -
shiro 不执行授权方法 doGetAuthorizationInfo()
2017-03-02 09:28 3831ShiroDbRealm.java 代码如下 public ... -
使用Shiro重写Session
2016-08-13 12:06 675摘要 在使用SpringMVC的时候,我们习惯使用与容器(to ... -
Shiro 拦截器介绍
2016-08-08 10:20 478Shiro使用了与Servlet一样的Filter接口进行扩展 ... -
openAPI相关的表
2016-07-29 10:08 336OAuth2 自己的实现 -
Shiro源码分析-初始化-SecurityManager
2016-07-20 09:15 389http://www.tuicool.com/articles ... -
跟我学Shiro目录贴
2016-07-19 08:37 336http://jinnianshilongnian.iteye ...
相关推荐
标题提到的"shiro-attack-4.7.0-SNAPSHOT-all.zip"很可能是针对Apache Shiro的安全测试工具或者漏洞利用工具包,其主要目的是帮助开发者检测和防范Shiro框架相关的安全问题。 描述中的"序列化验证工具"可能是指该...
Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常轻松地开发出足够安全的应用程序。它既适用于传统的Web应用,也适用于现代的Java EE和Android应用。现在我们来深入...
赠送Maven依赖信息文件:shiro-config-core-1.4.0.pom; 包含翻译后的API文档:shiro-config-core-1.4.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.shiro:shiro-config-core:1.4.0; 标签:apache...
赠送Maven依赖信息文件:shiro-config-core-1.4.0.pom; 包含翻译后的API文档:shiro-config-core-1.4.0-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.shiro:shiro-config-core:1.4.0; ...
对应Maven信息:groupId:org.apache.shiro,artifactId:shiro-core,version:1.3.2 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持...
Apache Shiro是一个强大且易用的Java安全框架,它提供了认证、授权、加密和会话管理功能,可以简化开发人员处理安全的复杂性。在"shiro-root-1.2.3-source-release zipa包"中,包含了Shiro框架的核心源代码,允许...
shiro(shiro-all-1.8.0.jar)
赠送Maven依赖信息文件:shiro-core-1.4.0.pom; 包含翻译后的API文档:shiro-core-1.4.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.shiro:shiro-core:1.4.0; 标签:apache、shiro、core、中文...
赠送Maven依赖信息文件:shiro-event-1.4.0.pom; 包含翻译后的API文档:shiro-event-1.4.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.shiro:shiro-event:1.4.0; 标签:apache、shiro、event、...
赠送Maven依赖信息文件:shiro-cas-1.2.3.pom; 包含翻译后的API文档:shiro-cas-1.2.3-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.shiro:shiro-cas:1.2.3; 标签:apache、shiro、cas、...
赠送Maven依赖信息文件:shiro-crypto-core-1.4.0.pom; 包含翻译后的API文档:shiro-crypto-core-1.4.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.shiro:shiro-crypto-core:1.4.0; 标签:apache...
赠送Maven依赖信息文件:shiro-crypto-cipher-1.4.0.pom; 包含翻译后的API文档:shiro-crypto-cipher-1.4.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.shiro:shiro-crypto-cipher:1.4.0; 标签:...
赠送Maven依赖信息文件:shiro-crypto-core-1.4.0.pom; 包含翻译后的API文档:shiro-crypto-core-1.4.0-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.shiro:shiro-crypto-core:1.4.0; ...
Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常容易地开发出足够安全的应用。标题"shiro-root-1.3.2-source-release"表明这是一个Apache Shiro的1.3.2版本源码包,...
【标题】"SpringMVC-Mybatis-Shiro-redis-master" 涉及的是一个集成框架项目,这个项目集成了四个关键的技术组件:SpringMVC、MyBatis、Shiro和Redis。这些技术在现代Java Web开发中扮演着重要角色。 **SpringMVC**...
对应Maven信息:groupId:org.apache.shiro,artifactId:shiro-spring,version:1.3.2 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持...
赠送Maven依赖信息文件:shiro-config-ogdl-1.4.0.pom; 包含翻译后的API文档:shiro-config-ogdl-1.4.0-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.shiro:shiro-config-ogdl:1.4.0; ...
shiro-root-1.2.4-source-release shiro-root-1.2.3-source-release shiro-all-1.2.4.jar shiro-all-1.2.4.jar shiro-all-1.2.4.jar shiro-all-1.2.4.jar
赠送Maven依赖信息文件:shiro-ehcache-1.4.0.pom; 包含翻译后的API文档:shiro-ehcache-1.4.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.shiro:shiro-ehcache:1.4.0; 标签:apache、shiro、...