SpringBoot集成redis实现共享存储session

 更新时间:2024年03月18日 09:55:12   作者:咸鱼不闲.s  
这篇文章主要介绍了SpringBoot集成redis实现共享存储session的流程步骤,文中通过代码示例介绍的非常详细,并总结了一些常见的错误及解决方法,需要的朋友可以参考下

redis实现共享存储session

  • 首先下载redis,我下载的版本是5.0.14,目前官网貌似找不到5.x版本,可以自行去网上寻找。我这里的springboot版本是2.6.4
  • 引入redis依赖
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>2.6.4</version>
</dependency>
  • 引入 spring-session 和 redis 的整合
<!-- https://mvnrepository.com/artifact/org.springframework.session/spring-session-data-redis -->
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
    <version>2.6.3</version>
</dependency>
  • 修改 spring-session 存储配置 spring.session.store-type
spring:
  session:
    timeout: 86400 #过期时间:24h
    store-type: redis #存储类型redis

正常做完这些就可以实现共享存储session
但是我遇到一些问题:

自定义的Session存储库(SessionRepository)和@EnableRedisHttpSession注解冲突

配置好redis -session但是登录后,redis中并没有存储session

原因: 在之前解决跨域访问出现的Set-Cookie:SameSite=Lax 问题是,在网上引入了SessionConfig 配置类:

import org.springframework.boot.autoconfigure.session.DefaultCookieSerializerCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.MapSessionRepository;
import org.springframework.session.SessionRepository;
import org.springframework.session.config.annotation.web.http.EnableSpringHttpSession;
import org.springframework.session.web.http.DefaultCookieSerializer;
 
import java.util.concurrent.ConcurrentHashMap;
 
@Configuration
@EnableSpringHttpSession
public class SessionConfig {
    @Bean
    public SessionRepository sessionRepository() {
        return new MapSessionRepository(new ConcurrentHashMap<>());
    }
 
    @Bean
    DefaultCookieSerializerCustomizer cookieSerializerCustomizer() {
        return new DefaultCookieSerializerCustomizer() {
            @Override
            public void customize(DefaultCookieSerializer cookieSerializer) {
                cookieSerializer.setSameSite("None");
                cookieSerializer.setUseSecureCookie(true);
            }
        };
    }
}

可以看到该配置类里面引用了@EnableSpringHttpSession注解,并且建了一个名为sessionRepository的Bean,其作用是为Spring应用程序配置一个自定义的Session存储库(SessionRepository)。

使用了MapSessionRepository,它是Spring Session提供的一种内存存储方式,用于将Session数据存储在JVM内存中。通过传入ConcurrentHashMap作为构造函数的参数,实际上是在内存中创建了一个并发安全的Map,用于存储Session对象。
通常情况下,默认情况下Spring Session会将Session存储在类似Redis、MongoDB等外部持久化存储中,但是通过这段代码,我们可以将Session存储在内存中,这对于某些特定场景(比如开发和测试)可能会很有用。

但是现在,我们已经在application.yml配置文件中配置存储类型是redis,这导致SessionConfig中的sessionRepository覆盖掉了配置文件中的配置,导致session并没有存储到redis中 。

同时,如果在application.yml配置文件中配置已经配置好了session,就不要使用@EnableSpringHttpSession注解,我添加以后出现了以下报错

意思是我定义了重复的bean,@EnableRedisHttpSession注解和application.yml文件中的session配置存在冲突,特别是在指定存储类型、超时时间等方面。两者的配置不一致或冲突,导致应用程序对Session的处理出现问题。

现在去掉sessionRepository方法和@EnableRedisHttpSession注解,在进行测试,session成功存储在redis中

到此这篇关于SpringBoot集成redis实现共享存储session的文章就介绍到这了,更多相关SpringBoot redis共享session内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 简单说说Java SE、Java EE、Java ME三者之间的区别

    简单说说Java SE、Java EE、Java ME三者之间的区别

    本篇文章小编就为大家简单说说Java SE、Java EE、Java ME三者之间的区别。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-10-10
  • Mybatis事务如何跟Spring结合(数据库事务特性和Spring事务管理源码)

    Mybatis事务如何跟Spring结合(数据库事务特性和Spring事务管理源码)

    MyBatis与Spring的事务结合主要是通过Spring的事务管理和MyBatis的数据库操作来实现的,在本文中,我们将从数据库事务特性和Spring事务管理源码两个角度来分析MyBatis事务如何与Spring结合到一起的原理,感兴趣的朋友一起看看吧
    2024-01-01
  • 详解java如何集成swagger组件

    详解java如何集成swagger组件

    今天给大家带来的是关于Java的相关知识,文章围绕着java如何集成swagger组件展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Java规则引擎easy-rules详细介绍

    Java规则引擎easy-rules详细介绍

    本文主要介绍了Java规则引擎easy-rules详细介绍,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • RestClient 通过拦截器实现请求加密的示例

    RestClient 通过拦截器实现请求加密的示例

    本文介绍了如何通过拦截器实现请求加密,并通过RestClient优化了加密过程,传统的加密方法依赖对象转换和序列化处理,容易导致加密不一致或难以调试的问题,通过引入拦截器,可以直接操作请求体,避免了不必要的转换步骤,确保加密过程与请求体完全一致,感兴趣的朋友一起看看吧
    2025-02-02
  • SpringBoot中热点KEY缓存优化的2种主流策略

    SpringBoot中热点KEY缓存优化的2种主流策略

    所谓热点KEY,是指在缓存或数据库中被频繁访问的少量键值,这些键往往承载了系统中大部分的访问流量,本文将分享SpringBoot中三种主流的热点KEY缓存优化策略,大家可以根据需求进行选择
    2025-04-04
  • IDEA2024创建Web项目以及配置Tomcat的实现步骤

    IDEA2024创建Web项目以及配置Tomcat的实现步骤

    在Web项目的开发过程中,Tomcat作为一款开源的Servlet容器,扮演着至关重要的角色,本文将详细阐述2024版本的idea配置Tomcat的全过程,下面就来详细的介绍一下
    2025-10-10
  • Java编写程序之输入一个数字实现该数字阶乘的计算

    Java编写程序之输入一个数字实现该数字阶乘的计算

    这篇文章主要介绍了Java编写程序之输入一个数字实现该数字阶乘的计算,本文通过实例代码给大家介绍的非常想详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Java环境安装和编写并运行第一个程序(使用 VSCode 轻松上手)

    Java环境安装和编写并运行第一个程序(使用 VSCode 轻松上手)

    这篇文章主要介绍了Java环境安装和编写并运行第一个程序的相关资料,文中介绍的是使用VSCode来实现,通过这些步骤,初学者可以快速入门Java编程,需要的朋友可以参考下
    2025-04-04
  • Java毕业设计实战之医院心理咨询问诊系统的实现

    Java毕业设计实战之医院心理咨询问诊系统的实现

    这是一个使用了java+Spring+Maven+mybatis+Vue+mysql开发的医院心理咨询问诊系统,是一个毕业设计的实战练习,具有心理咨询问诊该有的所有功能,感兴趣的朋友快来看看吧
    2022-01-01

最新评论