SpringBoot集成redis實現(xiàn)共享存儲session
redis實現(xiàn)共享存儲session
- 首先下載redis,我下載的版本是5.0.14,目前官網(wǎng)貌似找不到5.x版本,可以自行去網(wǎng)上尋找。我這里的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
正常做完這些就可以實現(xiàn)共享存儲session
但是我遇到一些問題:
自定義的Session存儲庫(SessionRepository)和@EnableRedisHttpSession注解沖突
配置好redis -session但是登錄后,redis中并沒有存儲session
原因: 在之前解決跨域訪問出現(xiàn)的Set-Cookie:SameSite=Lax 問題是,在網(wǎng)上引入了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數(shù)據(jù)存儲在JVM內存中。通過傳入ConcurrentHashMap作為構造函數(shù)的參數(shù),實際上是在內存中創(chuàng)建了一個并發(fā)安全的Map,用于存儲Session對象。
通常情況下,默認情況下Spring Session會將Session存儲在類似Redis、MongoDB等外部持久化存儲中,但是通過這段代碼,我們可以將Session存儲在內存中,這對于某些特定場景(比如開發(fā)和測試)可能會很有用。
但是現(xiàn)在,我們已經(jīng)在application.yml配置文件中配置存儲類型是redis,這導致SessionConfig中的sessionRepository覆蓋掉了配置文件中的配置,導致session并沒有存儲到redis中 。
同時,如果在application.yml配置文件中配置已經(jīng)配置好了session,就不要使用@EnableSpringHttpSession注解,我添加以后出現(xiàn)了以下報錯

意思是我定義了重復的bean,@EnableRedisHttpSession注解和application.yml文件中的session配置存在沖突,特別是在指定存儲類型、超時時間等方面。兩者的配置不一致或沖突,導致應用程序對Session的處理出現(xiàn)問題。
現(xiàn)在去掉sessionRepository方法和@EnableRedisHttpSession注解,在進行測試,session成功存儲在redis中

到此這篇關于SpringBoot集成redis實現(xiàn)共享存儲session的文章就介紹到這了,更多相關SpringBoot redis共享session內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring源碼之事件監(jiān)聽機制(實現(xiàn)EventListener接口方式)
這篇文章主要介紹了Spring源碼之事件監(jiān)聽機制(實現(xiàn)EventListener接口方式),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
Java過濾器與監(jiān)聽器間區(qū)別與聯(lián)系
監(jiān)聽器是一個接口內容由我們實現(xiàn),會在特定時間被調用,監(jiān)聽器用于監(jiān)聽web應用中三大域對象(request,session,application),信息的創(chuàng)建,銷毀,增加,修改,刪除等動作的發(fā)生,然后做出相應的響應處理2023-01-01
java EasyExcel面向Excel文檔讀寫邏輯示例詳解
這篇文章主要為大家介紹了java EasyExcel面向Excel文檔讀寫邏輯示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07
從繁瑣到簡潔的Jenkins?Pipeline腳本優(yōu)化實踐
這篇文章主要為大家介紹了從繁瑣到簡潔的Jenkins?Pipeline腳本優(yōu)化實踐示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12

