美文网首页
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