Spring-Session单点登录

原生的单点登录逻辑会对我们的代码产生污染,一旦业务需求发生变更,改换成另外的方案,那么就会非常的麻烦。更好的解决方案就是Spring-Session,她的可插拔性非常好,当然,这只是其中的一个优点,我们开始吧

概述

  1. SpringSession提供了
    • 一套管理ServletHttpSession的解决方案;
    • 一台Cluster Session的解决方案,默认使用外置的Redis存储Session的方式解决Session共享的问题;
  2. 相关网站:
    • 官方网站:https://projects.spring.io/spring-session
    • 文档地址:https://docs.spring.io/spring-session/docs/current/reference/html5
    • 源码地址:https://github.com/spring-projects/spring-session

集成步骤

  1. 导入maven(注意Spring的版本需要大于等于4.0.3,否在后面的过滤器会报异常):
    
        org.springframework.session
        spring-session-data-redis
        1.2.0.RELEASE
    
    
  2. 添加过滤器SessionExpireFilter
    
        sessionExpireFilter
        com.mmall.controller.common.SessionExpireFilter
    
    
        sessionExpireFilter
        *.do
    
    
  3. 在Spring的配置文件中添加配置:
    
        
    
    
        
        
        
        
        
    
    
        
        
        
        
    
    
  4. 添加单点登录Session的各种配置:
    
        
        
         
        
        
    
    
  5. 正常编写session代码(注意:这里的response.getData()返回的对象必须实现接口java.io.Serializable),如:
    session.setAttribute(Consts.USER_IN_SESSION,response.getData());
    session.getAttribute(Const.USER_IN_SESSION);
    session.removeAttribute(Const.USER_IN_SESSION);
    
  6. 完成配置,需要注意:
    • Spring-Session通过代理拦截我们设置的session信息,并使用Jedis存储到Redis上;
    • Spring-Session在Redis上存储的不止用户的信息,还有两个关联的key;
    • 当过期时间到时,Spring-Session会先去删除关联的key信息,最后过一段时间删除真正存储的用户信息;
    • Redis中,当关联的key被删除之后,真正的信息删除之前的这一段时间里,我们也是无法获取真正存储在Redis中的信息的;
  7. 使用到的相关的类:
    • org.springframework.data.redis.connection.jedis.JedisConnectionFactory
    • org.springframework.web.filter.DelegatingFilterProxy
    • org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration
    • org.springframework.session.web.http.DefaultCookieSerializer
    • redis.clients.jedis.JedisPoolConfig
    • org.springframework.session.web.http.SessionRepositoryFilter
    • org.springframework.session.data.redis.RedisOperationsSessionRepository
    • org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer
    • org.springframework.session.web.http.SessionRepositoryFilter.SessionRepositoryRequestWrapper
    • org.springframework.session.web.http.SessionRepositoryFilter.SessionRepositoryResponseWrapper
    • org.springframework.session.web.http.CookieHttpSessionStrategy

你可能感兴趣的:(Spring-Session单点登录)