Spring Boot 集成Spring Session 通过Redis实现分布式共享Session

一、首先我们要引入依赖,修改pom.xml添加:

//引入spring session
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>
//引入redis
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

二、修改application.properties或者yml文件: 

spring.redis.port=6379
spring.redis.host=127.0.0.1
spring.redis.password=密码没可以不填
spring.redis.pool.max-active=10
spring.redis.pool.max-idle=5
spring.redis.pool.max-wait=60000

三、启用redis管理Session 

//第一种方式:修改application.properties,添加
spring.session.store-type=redis
//第二种方式:启用注解
@EnableRedisHttpSession

四、进行一些简单的设置(两种配置方式)

  1.修改命名空间:@EnableRedisHttpSession(redisNamespace="")

                                    spring.session.redis.namespace=your_namesapce(自己起个名字)

        2.修改过期时间:@EnableRedisHttpSession(maxInactiveIntervalInSeconds=2000) 单位是秒

                                    server.servlet.session.cookie.max-age=1800s

五、分布式程序通过HttpSession获取/设置session

       只要是程序配置在同一个redis服务都可以共享,通过SESSIONID取得session。

       经测试SESSIONID的路径默认就是"/",只要域名相同(端口号可不同)全路径携带。分布式项目推荐使用Nginx伪装同域名。

@RequestMapping(“uid”) 
String uid(HttpSession session) { 
    UUID uid = (UUID) session.getAttribute(“uid”); 
    if (uid == null) { 
       uid = UUID.randomUUID(); 
    } 
    session.setAttribute(“uid”, uid); 
    return session.getId(); 
} 

六 redis存储结构

以使用SpringSecurtiy安全框架的项目为例:redis中存储的结构和内容。可以看到session中存储了SpringSecurtiy安全框架中的SecurtiyContext,其中包含用户信息和权限。

 

posted @ 2018-12-19 21:48  sw008  阅读(700)  评论(0)    收藏  举报