程林街网站建设,成都网站的建设,辽宁网站建设的网络科技公司,亚马逊雨林简介spring boot集成redis实现共享存储session
redis实现共享存储session
首先下载redis,我下载的版本是5.0.14,目前官网貌似找不到5.x版本#xff0c;可以自行去网上寻找。我这里的springboot版本是2.6.4引入redis依赖
!-- https://mvnrepository.com/artifact/org.spring…spring boot集成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 --
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactIdversion2.6.4/version
/dependency引入 spring-session 和 redis 的整合
!-- https://mvnrepository.com/artifact/org.springframework.session/spring-session-data-redis --
dependencygroupIdorg.springframework.session/groupIdartifactIdspring-session-data-redis/artifactIdversion2.6.3/version
/dependency修改 spring-session 存储配置 spring.session.store-type
spring:session:timeout: 86400 #过期时间24hstore-type: redis #存储类型redis正常做完这些就可以实现共享存储session 但是我遇到一些问题 自定义的Session存储库SessionRepository和EnableRedisHttpSession注解冲突
配置好redis -session但是登录后redis中并没有存储session
原因 在之前解决跨域访问出现的Set-Cookie:SameSiteLax 问题是在网上引入了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 {Beanpublic SessionRepository sessionRepository() {return new MapSessionRepository(new ConcurrentHashMap());}BeanDefaultCookieSerializerCustomizer cookieSerializerCustomizer() {return new DefaultCookieSerializerCustomizer() {Overridepublic 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注解我添加以后出现了以下报错 意思是我定义了重复的beanEnableRedisHttpSession注解和application.yml文件中的session配置存在冲突特别是在指定存储类型、超时时间等方面。两者的配置不一致或冲突导致应用程序对Session的处理出现问题。
现在去掉sessionRepository方法和EnableRedisHttpSession注解在进行测试session成功存储在redis中