美文网首页
Spring Session -- session共享

Spring Session -- session共享

作者: saoraozhe3hao | 来源:发表于2018-09-06 18:12 被阅读0次

    官网:https://spring.io/projects/spring-session

    方案

    集群中共享session的方案:
    一、无需共享:1、将会话信息放在cookie中;2、利用负载均衡,同一IP的请求总是转发到同一台Tomcat
    二、Session同步:放开Tomcat的server.xml中的<Cluster>,Tomcat将在同一网段广播session变化
    三、Session单独存储:1、将session存到数据库中;2、将Session存到缓存服务器,例如redis、memcached

    方案三的工具有tomcat-redis-session-manager、memcached-session-manager、spring-session等

    Spring Session项目组成

    前提:已集成Spring-data-redis
    1、配置Maven依赖

    <dependency>
      <groupId>org.springframework.session</groupId>
      <artifactId>spring-session-data-redis</artifactId>
      <version>2.0.6.RELEASE</version>
    </dependency>
    

    2、项目web.xml
    配置过滤器,web.xml中的配置得按一定顺序

    <filter>
        <filter-name>springSessionRepositoryFilter</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>springSessionRepositoryFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    

    3、Spring配置文件

    <bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"/>
    

    4、使用
    在Controller中传入HttpSession,即可读写session

    SpringBoot 整合 Spring Session

    1、SpringBoot 整合 Redis,参考 https://www.jianshu.com/p/01e2166dbb3c
    2、pom.xml

    <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
     </dependency>
    

    3-1、application.yml

    spring:   
      session:
        store-type: redis
        timeout: 3600s
        redis:
          flush-mode: on_save  # 响应完成后在将本机的session 同步 到 redis,immediate 则在 setAttribute和removeAttribute时同步
          namespace: my  # key的前缀
    

    3-2、以上配置也可以通过注解实现(注解在主类),二选一即可

    @EnableRedisHttpSession(maxInactiveIntervalInSeconds=1800, redisFlushMode=RedisFlushMode.ON_SAVE, redisNamespace = "my")
    

    spring-session-data-redis 存储的key

    "sessions:哈希值" :session的创建时间、最后访问时间、Attributes、有效时长,另外还有TTL
    "session:index:org.springframework.session.FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME:用户名":用于通过用户名来查找session
    "sessions:expires:哈希值":空值,TTL 比 "sessions:哈希值" 小5分钟;用于标记session的真正的有效期

    过期事件:"sessions:expires:哈希值"被删除,即表示session过期,此时redis发布”过期事件“;session过期后,"sessions:哈希值" 仍会保留5分钟,用于过期事件订阅者查询

    相关文章

      网友评论

          本文标题:Spring Session -- session共享

          本文链接:https://www.haomeiwen.com/subject/smtfgftx.html