SpringSession

Spring Session 是 Spring 的项目之一。Spring Session 提供了一套创建和管理 Servlet

HttpSession 的方案,默认采用外置的 Redis 来存储 Session 数据,以此来解决 Session 共享的

问题。(springsession储存session数据的方式有很多,我们常见使用redis)

实现步骤:

        1.导包


            org.springframework.session
            spring-session-data-redis
        

        2.配置

spring:
  session:
    store-type: redis  # springsession使用redis类型

        3.开启 redis作为session的储存

@EnableRedisHttpSession  //开启整合redis作为session的储存

在经过以上的操作之后我们在想session储存数据,就会储存到redis中,但是需要注意的是,默认是使用jdk序列化的方式储存,一般情况为了房方便查看储存的数据我们可以配置储存格式为json。

配置redis储存session的序列化方式为json:


@Configuration
public class SessionConfig {


    /**
     * 配置redis的序列化方式  我们使用json的方式 之前默认使用二进制序列化
     *
     * 注入bean对象的名字必须是springSessionDefaultRedisSerializer
     * @return
     */
    @Bean
    public RedisSerializer springSessionDefaultRedisSerializer(){
        return new GenericJackson2JsonRedisSerializer();
    }
} 
  

在经过我们上面操作之后,储存session的数据就你能储存到redis中并且是json的格式,但是如果我们在微服务情况下其他服务还是不能获取到session数据,因为我们获取session是根据cookie的jsessionid获取的,在之前的session存储中默认cookie的作用域为当前域名,所以其他服务(其他域名)还是不能获取到session的值,我们需要在储存session的时候,修改cookie的作用域来保证其他服务能访问到session(一般修改为所有的服务为一个公共的域值),修改方式如下:

@Configuration
public class SessionConfig {

    /**
     * 配置cookie的作用域名
     * @return
     */
    @Bean
    public CookieSerializer cookieSerializer(){
        DefaultCookieSerializer defaultCookieSerializer = new DefaultCookieSerializer();

        //设置规则 设置作用域
        defaultCookieSerializer.setDomainName("xxx.com");

        return defaultCookieSerializer;
    }

}

SpringSession_第1张图片

 

 

你可能感兴趣的:(前端)