微服務 session 共享的問題


問題

在 SpringCloud 框架的項目中,添加驗證碼校驗,驗證碼存放在 session 中。后端在校驗過程中,發現從 session 中獲取驗證碼為 null。

分析

debug 的時候發現,每一次請求,后端獲取到的 session 的 id 都不一樣。
校驗驗證碼的那個模塊有兩個實例,請求 A 實例時,生成了一個 id 為 sessionId1 的 session,請求 B 實例時,B 發現 sessionId1 沒有對應的 session,於是重新生成了一個 sessionId2 的 session。當再次請求實例 A 時,A 發現 sessionId2 的 session 不存在,於是又生成一個新的 session...

解決

對於同一個瀏覽器會話,需要讓不同服務共享同一個 session,可以借助 redis 來實現。

  1. pom 文件
<!--spring boot 與redis應用基本環境配置 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--spring session 與redis應用基本環境配置 -->
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>
  1. 配置好 redis
spring.redis.database = 0
spring.redis.host = 172.16.131.153
spring.redis.port = 6379
spring.redis.password = test
spring.redis.pool.max-active = 200
spring.redis.pool.max-wait = -1
spring.redis.pool.max-idle = 10
spring.redis.pool.min-idle = 0
spring.redis.pool.timeout = 1000
  1. 在需要共享 session 的服務的啟動類上,加上注解
@EnableRedisHttpSession


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM