分布式session共享问题解决方案——springsession的使用

官方文档

Spring Session

改文章是springboot 下的分布式session共享解决方案

spring session 是分布式session共享问题的解决方案,本文选择将session保存在redis里面,因此需要先配置redis

注意

  1. 将对象存储在redis里需要先序列化
  2. 多个微服务,应该都配置springsession,并且共同的session值对象应当放在公共模块中,这样不同域名才能都取出来session
  3. 不同微服务的spring session相关配置应该共享

导入依赖

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

启动类添加注解

image-20220909111353567

添加配置类

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.session.web.http.CookieSerializer;
import org.springframework.session.web.http.DefaultCookieSerializer;

@Configuration
public class MyConfig {

    /**
     * session 共享的作用域
     * @return
     */
    @Bean
    public CookieSerializer cookieSerializer() {
        DefaultCookieSerializer cook = new DefaultCookieSerializer();

        // session 作用域,为了保证共享,应该尽可能的大
        cook.setDomainName("mail.com");
        cook.setCookieName("MAILSESSION"); // cookie名

        return cook;
    }

    /**
     * 需要配置redis序列化
     * @return
     */
    @Bean
    public RedisSerializer<Object> springSessionDefaultRedisSerializer() {
        return new GenericJackson2JsonRedisSerializer();
    }

}

之后,正常添加session即可

posted @ 2022-09-09 11:15  yangruomao  阅读(220)  评论(0编辑  收藏  举报