Springboot整合SpringSession,解决分布式session共享问题

admin
2022-03-10 / 0 评论 / 360 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年03月26日,已超过971天没有更新,若内容或图片失效,请留言反馈。

springboot整合SpringSession

1、引入依赖

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

2、springboot配置

application.properties配置:保存类型

spring.session.store-type=redis # Session store type.

session过期时间:

server.servlet.session.timeout= # Session timeout. If a duration suffix is not specified, seconds is used.

其它配置信息可参考官网

spring.session.redis.flush-mode=on_save # Sessions flush mode.
spring.session.redis.namespace=spring:session # Namespace for keys used to store sessions.

连接信息配置:

spring.redis.host=localhost # Redis server host.
spring.redis.password= # Login password of the redis server.
spring.redis.port=6379 # Redis server port.

3、开启springSession

主类加上注解@EnableRedisHttpSession

@EnableRedisHttpSession

4、使用

注意:

1、需要保存到redis中的数据必须序列化。

2、需要实现session共享的微服务都必须整合SpringSession。

5、解决子域session共享、cookie进行json序列化

MySessionConfig配置

package com.yanxizhu.family.booking.config;

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;

/**
 * @description: springSession配置
 * @author: <a href="mailto:batis@foxmail.com">清风</a>
 * @date: 2022/3/10 20:11
 * @version: 1.0
 */
@Configuration
public class MySessionConfig {

    @Bean
    public CookieSerializer cookieSerializer(){
        DefaultCookieSerializer defaultCookieSerializer = new DefaultCookieSerializer();
        //设置共享域名
        defaultCookieSerializer.setDomainName("yanxizhu.com");
        //设置session名称
        defaultCookieSerializer.setCookieName("YANXIZHUSESSION");
        return defaultCookieSerializer;
    }

    //session序列化机制
    @Bean
    public RedisSerializer<Object> springSessionDefaultRedisSerializer(){
        return new GenericJackson2JsonRedisSerializer();
    }
}

注意:需要session共享的微服务都需要配置,或者抽取到公共模块。

6、多系统-session共享问题(单点登录)

抽取单独的认证中心微服务处理单点登录

单点登录,可参考一个开源单点登录项目,许雪里/xxl-sso

7

评论 (0)

取消