shiro 使用redis 频繁请求获取session的问题
来源:互联网 发布:gif 软件 编辑:程序博客网 时间:2024/06/05 15:50
shiro 框架获取 session里面的属性时,每次都去拿取session,一次请求中会有很多次 获取 session 里面的属性,所以有很多次,这个如果是本地缓存到无所谓,因为本地缓存是直接放置session对象的,但是如果是共享缓存比如 redis ,这个就郁闷了,每次获取session都要从redis 里面获取然后反序列化。操作session属性导致频繁访问redis这个大概是没办法避免了.shiro对每一次请求都会更新最后访问时间.当一个页面包含多个资源的时候就会发生多次update session。
方案1:
重写sessiondao的方法,当发现是静态资源时,放弃update
重写sessionDAO方法,里面获取当前的request,判断当前访问的是否是静态资源,如果是静态资源则不更新。
获取当前request的方法:
1、在web.xml添加如下listener
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
@Override protected void doUpdate(Session session) { /** * 每次请求shiro都会更新最后访问时间,导致调用此方法,由于使用了redis缓存, * 那么如果静态资源很多会导致短时间内大量更新redis缓存 * 但是这是不需要的,只有在访问controller请求时才需要更新session */ HttpServletRequest request = Servlets.getRequest(); if (request != null){ String uri = request.getServletPath(); // 如果是静态文件,则不更新SESSION if (Servlets.isStaticFile(uri)){ return; } // 如果是视图文件,则不更新SESSION if (StringUtils.startsWith(uri, PropertiesUtil.getString("web.view.prefix")) && StringUtils.endsWith(uri, PropertiesUtil.getString("web.view.suffix"))){ return;} ... }
@Overrideprotected Session doReadSession(Serializable sessionId) {Session s = null;HttpServletRequest request = Servlets.getRequest();if (request != null){String uri = request.getServletPath();// 如果是静态文件,则不获取SESSIONif (Servlets.isStaticFile(uri)){return null;}s = (Session)request.getAttribute("session_"+sessionId);}if (s != null){return s;}//去redis读取session}
springmvc中判断当前访问是否静态资源 http://blog.csdn.net/zsg88/article/details/77018543
方案2:
将SpringMVC和Shiro的url-pattern由"/"修改为"*.do",在容器层过滤掉静态请求.
阅读全文
3 0
- shiro 使用redis 频繁请求获取session的问题
- shiro用memcache管理session频繁读取和更新session的问题
- 使用redis进行基于shiro的session集群共享
- 使用redis进行基于shiro的session集群共享
- 使用redis进行基于shiro的session集群共享
- Java使用Interceptor+redis去实现请求重复频繁提交问题
- shiro redis session共享
- shiro session存redis
- 使用shiro和redis结合,管理SessionDAO的对Session的CRUD,并源码分析
- redis请求频繁就出现redis超时
- shiro(1.2.3)在sae平台上不能获取session的问题
- 使用shiro的session后,HttpSession.getServletContext() 获取一直是null的解决方法
- 我的shiro之旅-session共享-redis
- Shiro与Redis集成,集群下的session共享
- spring boot整合redis实现shiro的分布式session共享
- 基于shiro+redis缓存的session共享方案
- 优化 shiro 多次调用 redis 的问题
- Nginx shiro redis 多tomcat共享session
- sai 绘图软件快捷键
- Java多线程之sleep,wait,join和yield关键字
- Cool Edit Pro软件介绍
- UVa 1584 求余实现环状串
- sql
- shiro 使用redis 频繁请求获取session的问题
- AngularJS API之$injector ---- 依赖注入
- 10分钟上手玩ROS仿真机器人
- GAN原理总结
- NameNode 、DataNode、Secondary NameNode工作机制
- JDBC实现增删查改实例
- C++程序员学Java系列之六:运算符
- vim常用插件,设置,命令记录
- ClassNotFoundException与Class.forName