spring-boot 整合 spring-session
-
spring-session 支援叢集 session 共享,支援的方式是基於 cookie 或者基於 header。cookie 的限制在於只能在頂級域名下共享,不同的頂級域名之間是無法共享 session 的,所以經過測試 spring-session 無法實現頂級域名的 session 共享。
暫時行得通的方式是結合 spring-session,通過辨別同一訪問者 ip 來實現 session 共享。 -
單點登入是把登入後的憑據統一存在 server 端,基於 server 的同一個域名因此可以實現 session 共享。
spring-boot 整合 spring-session 步驟
在 pom.xml 中加入:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
在 application.properties 中加入配置:
# SPRING SESSION REDIS
spring.session.store-type=redis
spring.redis.host={your-ip}
spring.redis.password=abc123456
spring.redis.port=6379
spring.redis.timeout=3000
spring.redis.jedis.pool.max-idle=20
spring.redis.jedis.pool.min-idle=5
#spring.redis.pool.max-active=60
# Maximum age of the session cookie 30 分鐘
server.servlet.session.cookie.max-age=1800
加入 spring-session redis 配置:
@Configuration
public class RedisSessionConfig {
@Bean
public CustomCookiesSerializer customerCookiesSerializer() {
CustomCookiesSerializer customerCookiesSerializer = new CustomCookiesSerializer();
customerCookiesSerializer.setCookieName("JSESSIONID");
customerCookiesSerializer.setCookiePath("/");//設定 為 '/' 可解決同一臺伺服器下不同專案直接 session 共享
return customerCookiesSerializer;
}
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(
Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(redisConnectionFactory);
template.setKeySerializer(jackson2JsonRedisSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashKeySerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
使用 CustomCookiesSerializer
覆蓋預設的 DefaultCookiesSerializer
cookie 讀取機制。
redis 安裝:
windows 環境:
-
修改 redis.windows.conf 檔案
-
設定密碼:搜尋 requirepass,設定為 requirepass 123456
-
設定最大記憶體,預設不設定沒有限制,最好是設定為 100 兆:maxmemory 1073741824
-
啟動 redis: redis-server.exe redis.windows.conf
出現 creating server tcp listening socket 127.0.0.1:6379: bind No error 註釋掉配置檔案中的 bind 127.0.0.1 或者修改為本機地址
linux 環境:
- 下載:http://download.redis.io/releases/redis-4.0.9.tar.gz 編譯完即可
- 修改配置檔案
redis.conf
:註釋掉 bind,並設定 requirepass(密碼) 和最大記憶體(1073741824), 然後把該檔案拷貝到/usr/local/bin
- 啟動:redis-server /usr/local/bin/redis.conf
常用命令:
登入 redis:
- 進入 redis 安裝目錄下的 src 目錄(linux 可全域性直接執行):執行
redis-cli -h: {serverIP} -p 6379
- 授權:
auth {password}
- 預設登入進去是
0
資料庫,切換資料庫可使用select {index}
檢視所有資料的 key: keys *
清除所有資料:flushall
每一次 session 儲存到 redis 內容的 key
spring:session:sessions:expires
spring:session:sessions
spring:session:expirations
參考 spring-session 官方文件
https://projects.spring.io/spring-session/ 右下方 guides
相關文章
- Spring-Boot整合RedisSpringbootRedis
- Spring-Cloud整合Spring-Session的注意點SpringCloudSession
- spring-boot 整合 spring-securitySpringboot
- SpringBoot2.x 整合Spring-Session實現Session共享Spring BootSession
- spring-sessionSpringSession
- spring-boot專案的docker整合化部署(一)SpringbootDocker
- Spring-boot整合AOP及AOP相關學習Springboot
- Mokito 單元測試與 Spring-Boot 整合測試Springboot
- Apache Camel與Spring-boot和Kafka的整合開源案例ApacheSpringbootKafka
- Spring-Boot整合通用PageHelper外掛遇到的問題Springboot
- spring-boot 整合mybatis-plus 組成後臺開發基本框架SpringbootMyBatis框架
- spring-boot快速入門學習筆記-整合JPA mybatis rabbitmq mongodb redisSpringboot筆記MyBatisMQMongoDBRedis
- spring-boot挖掘Springboot
- spring-boot啟動Springboot
- Spring-Boot快速上手Springboot
- spring-boot 中使用 FastDFSSpringbootAST
- 【spring-boot】自定義starterSpringboot
- Spring-boot國際化Springboot
- spring-boot參考文章Springboot
- spring-boot記錄sql探索SpringbootSQL
- 使用gradle管理spring-boot專案GradleSpringboot
- spring-boot - 編寫自己的starterSpringboot
- spring-boot入門程式詳解Springboot
- spring-boot登陸過濾功能Springboot
- spring-boot 統一異常捕獲Springboot
- Spring-boot模組化程式設計Springboot程式設計
- spring-boot + jsonp 解決前端跨域問題SpringbootJSON前端跨域
- Spring-Boot專案中配置redis註解快取SpringbootRedis快取
- spring-boot版本問題讓開發懷疑人生Springboot
- 把spring-boot專案部署到tomcat中的方法SpringbootTomcat
- intellij idea 無法啟動或除錯 spring-bootIntelliJIdea除錯Springboot
- spring-boot定製和最佳化內嵌的TomcatSpringbootTomcat
- 使用XLog、Spring-Boot、And-Design-Pro搭建日誌系統Springboot
- spring-boot-admin對spring-boot專案進行監控Springboot
- [maven][spring boot] mvn spring-boot:run啟動時,指定pom檔案MavenSpring Boot
- 【springboot】學習4:整合JDBC、整合druid、整合mybatis、整合 SpringSecuritySpring BootJDBCUIMyBatisGse
- spring-boot 使用hibernate validation對引數進行優雅的校驗Springboot
- SpringBoot整合系列-整合JPASpring Boot