`
m635674608
  • 浏览: 5026348 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

spring http session 监听 创建 失效session

 
阅读更多

一.流程概述

主要是通过扩展ServletRequestWraper来实现的。

1.SessionRepositoryFilter.doFilterInternal

2.会创建SessionRepositoryRequestWrapper,这里面的getSession(boolean)会从外部存储创建session

---sessionRepository是RedisOperationsSessionRepository

---new redissession的时候会设置一些默认属性,比如间隔时间,lastAccessTime等

这些属性关联保存在MapSession中,创建完session会设置lastAccessTime

---过滤器链执行完后,有commitSession,会把session存储到外部存储,比如redis

[java] view plain copy
 
  1. try {  
  2.     filterChain.doFilter(strategyRequest, strategyResponse);  
  3. }  
  4. finally {  
  5.     wrappedRequest.commitSession();//这里实际会到RedisSession的saveDelta方法  
  6. }  

这种方式即使我们在session里面放了一个list,然后往list里面添加元素,且未显示更新session的时候,session的过期时间依然会更新。如下。

[java] view plain copy
 
  1. List<String> list = (List<String>) session.getAttribute("list");  
  2. if (list == null) {  
  3.     list = new ArrayList<>();  
  4.     session.setAttribute("list", list);  
  5. }  
  6. list.add(new Date().toString()); //2  

在2的时候session的时间会被更新

---当后续访问到来时,会通过sessionId获取session,同时更新lastAccessTime。

3.这个filter是在SpringHttpSessionConfiguration里面创建的,当然redis的实现也有对应的实现,RedisHttpSessionConfiguration,是上面class的子类

---如果想配置session的过期时间,那么需要在RedisHttpSessionConfiguration里面配置,有个参数maxInactiveIntervalInSeconds,默认1800秒。因为session的管理被放到了外部的存储,所以web.xml里面的关于session过期的配置不在生效。



简单配置

 

[html] view plain copy
 
  1. <context:annotation-config />  
  2. <bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration" >  
  3. <!-- 5分钟过期 -->  
  4.         <property name="maxInactiveIntervalInSeconds" value="300" />  
  5. </bean>  
  6. <bean class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" />  

 

 

二.sessionListener support

1.在RedisOperationSessionRepository实现了MessageListener接口,redis有消息通知的时候,onMessage方法被调用,然后接下来把消息封装成各种事件

然后通过ApplicationEventPublisher和listener协作(观察者模式),

前者发送事件,后者监听处理。

2.SessionEventHttpSessionListenerAdapter实现了ApplicationListener,有新事件时,onApplicationEvent方法被调用。所以只需要在这个类里面添加我们所需要的处理逻辑的listener即可。

[java] view plain copy
 
  1. public SessionEventHttpSessionListenerAdapter(List<HttpSessionListener> listeners){  
  2.         super();  
  3.         this.listeners = listeners;  
  4. }  

:假如我们启动2个tomcat,那么当一个session过期时,那么我们的listener在这2个tomcat都会收到事件通知。会导致重复。如果需要基于session listener做一些事情,则需要注意这点。

[html] view plain copy
 
  1. <bean id="listenerAdapter" class="org.springframework.session.web.http.SessionEventHttpSessionListenerAdapter">  
  2.         <constructor-arg name="listeners">  
  3.             <list>  
  4.                 <bean class="com.lp.techDemo.session.SessionListenerDemo" />  
  5.             </list>  
  6.         </constructor-arg>  
  7. </bean>  

 

Reference:

http://www.infoq.com/cn/articles/Next-Generation-Session-Management-with-Spring-Session?utm_campaign=rightbar_v2&utm_source=infoq&utm_medium=articles_link&utm_content=link_text

 

http://blog.csdn.net/shuipinglp/article/details/51578930

分享到:
评论

相关推荐

    spring security 3.x session-management 会话管理失效

    Spring Security可以通过配置`&lt;session-config&gt;`元素或使用`HttpSessionEventPublisher`监听器来设置会话超时时间。 4. **会话并发控制** - 会话并发控制限制了同一用户在同一时间可以活跃的会话数量,防止会话...

    SpringMVC拦截器实现监听session是否过期详解

    例如,session是如何在HTTP协议中实现的、session过期后如何清除、如何在不同容器中管理session等,这些内容对于理解和实现session监听机制也是十分关键的。总之,通过SpringMVC拦截器来实现对session是否过期的监听...

    详解Spring MVC拦截器实现session控制

    首先,session监听是实现session控制的一种常见方法,通过实现特定的监听器接口,可以在session创建、销毁或者超时等事件发生时得到通知。在Spring MVC中,虽然不能直接使用Java EE标准的HttpSessionListener,但...

    JavaWeb 用session统计在线人数

    3. **session监听**:使用`HttpSessionListener`或`HttpSessionAttributeListener`接口,监听session的创建和销毁事件。在session创建时,`onlineCount`加1;在session销毁(可能是用户主动退出或超时)时,`...

    session过期处理

    一是设置Session监听器,监听Session的销毁事件;二是每次接收到请求时,检查Session的有效性,如果过期则进行处理。 3. **Session过期后的处理**:常见的处理方式包括: - 弹出登录框:当检测到Session过期,...

    JAVA的SESSION精准统计

    这就需要我们在Session监听器中实现逻辑,当Session失效时触发事件并更新计数。 3. **分布式环境**:在分布式系统中,多个服务器可能共享同一个Session存储(例如使用Redis或Memcached)。在这种情况下,Session...

    Tomcat+redis、session同步

    - **监听器**:在`Tomcat`中添加`SessionListener`,以便在`session`创建、销毁时通知`Redis`,保持两者同步。 - **冲突解决**:在分布式环境下,可能有多个服务器同时尝试更新同一`session`,需要确保`Redis`的...

    SpringBoot 实现扫码登录

    二维码显示成功后,使用SSE方式开启二维码session监听状态,状态:0 二维码生成成功 ,1 手机端扫码成功 2手机端确认登录 -1 sessionId过期失效 调用登录接口,跳转到扫描二维码界面 扫描二维码,发送扫描通知 ...

    使用SessionListener+持久化Session+Springmvc拦截器实现单点登录

    在单点登录场景下,`SessionListener`通常用来监听用户登录事件,当用户在一个系统中登录后,我们可以通过`SessionListener`来创建或更新全局的会话信息,确保其他系统能够识别这个登录状态。 ### 持久化Session 在...

    使用Ajax时处理用户session失效问题的解决方法

    总结来说,处理Ajax请求中的用户session失效问题,需要在后端识别Ajax请求并返回特定的响应头,然后在前端监听并处理这些响应,以便在session过期时提示用户重新登录。通过这种方式,我们可以确保无论用户如何与页面...

    Spring-Reference_zh_CN(Spring中文参考手册)

    12.2.2. 在Spring的application context中创建 SessionFactory 12.2.3. HibernateTemplate 12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. ...

    MF00617-JAVA餐厅点餐管理源码.zip

    用来控制一个浏览器只能登陆一个用户,用户退出时清空cookie,关闭浏览器cookie自动清空,用户非正常退出下,需等待20分的session失效时间后方可正常登陆,监听session的失效方法在session失效时清空对应的sessionID...

    JSP开发中在spring mvc项目中实现登录账号单浏览器登录

    如果找到了,那么将该session失效,并从存储中移除。然后将新的登录信息存入session,并更新存储结构。 #### 5. 配置web.xml 在`web.xml`中配置监听器,当用户登录成功后,登录方法需要设置登录成功的信息到session...

    ssh框架的搭建的例子

    - 另外,为了在每个HTTP请求处理完后关闭Session,可以在`web.xml`中配置`OpenSessionInViewFilter`,避免Session失效问题。 6. **事务管理**: - 配置Spring的事务管理器,例如`HibernateTransactionManager`,...

    Java Web开发实战宝典 第20-24章

    - **Filter和Listener**:在Java Web中的作用,如登录验证过滤器和Session监听器。 ### 第23章:Spring MVC框架 - **Spring MVC介绍**:Spring框架的MVC模块,提供轻量级的Web开发解决方案。 - **Spring MVC组件**...

    开发web_xml.rar_WEB XML_java web开发_web.xml_web开发_web

    例如,以下配置创建了一个监听Session创建和销毁的监听器: ```xml &lt;listener-class&gt;com.example.SessionListener&lt;/listener-class&gt; ``` `SessionListener`类需要实现`javax.servlet....

    java_jsp_day03.pdf

    当用户禁用Cookie时,服务器端无法通过Cookie来识别特定用户,这将导致基于Cookie的Session失效。为解决此问题,可以使用URL重写技术,在每个发送给用户的URL后面附加一个唯一的Session ID,以此来跟踪用户。例如,...

    activeMq的简易实现和应用

    默认情况下,ActiveMQ会监听61616端口进行TCP连接,且管理界面可在8161端口的http://localhost:8161/admin访问。 三、创建与消费消息 1. 生产者:使用JMS API,我们可以创建一个MessageProducer对象来发送消息。...

    Java Web开发实战宝典 第17章 10-18

    本章可能讲述了session对象的创建、管理、失效以及cookie与session的区别和使用场景。 17.14章节可能关注了过滤器(Filter)的概念。过滤器是Java Web的一个强大特性,可以在请求被Servlet处理之前或之后执行预处理...

Global site tag (gtag.js) - Google Analytics