1. 程式人生 > >在Spring Boot中使用Spring Session解決分散式會話共享問題

在Spring Boot中使用Spring Session解決分散式會話共享問題

如果你正在使用Java開發Web應用,想必你對HttpSession非常熟悉,但我們知道HpptSession預設使用記憶體來管理Session,如果將應用橫向擴充套件將會出現Session共享問題。

Spring Session提供了一套建立和管理Servlet HttpSession的方案,以此來解決Session共享的問題,更為重要的是在Spring Boot中使用它極其簡單。

利用Servlet容器提供的外掛功能,自定義HttpSession的建立和管理策略,並通過配置的方式替換掉預設的策略。不過這種方式有個缺點,就是需要耦合Tomcat/Jetty等Servlet容器的程式碼。這方面其實早就有開源專案了,例如memcached-session-manager,以及tomcat-redis-session-manager。暫時都只支援Tomcat6/Tomcat7。

配置Nginx的負載均衡演算法為ip_hash,這樣每個請求按訪問IP的hash結果分配,這樣來自同一個IP的訪客固定訪問一個後端伺服器,有效解決了動態網頁存在的Session共享問題

如果你使用Shiro管理Session,可以用Redis來實現Shiro 的SessionDao介面,這樣Session便歸Redis保管。

設計一個Filter,利用HttpServletRequestWrapper,實現自己的 getSession()方法,接管建立和管理Session資料的工作。Spring-Session就是通過這樣的思路實現的。

Spring Session 支援使用Redis、Mongo、JDBC、Hazelcast來儲存Session,這裡以Redis為例。

引入Maven依賴(本示例使用dependencyManagement,如果你沒有使用它請新增<version>標籤)

配置你的Spring Application,將你的application.properties加入以下配置。

僅此兩步,便整合完畢,整個過程完全無痛、無感~

注意:如果你的Redis伺服器不是使用本地預設配置(localhost:6379),需要配置你的Redis,如何配置?看這裡。

我們來驗證一下~

果然,Http Session已被Spring Session進行包裝,我們可以依舊使用Http Session的API來進行程式設計。

Cookies 也正常建立,Key為SESSION。

使用redis-cli檢視,發現Redis中也已儲存相關資料。


相關推薦

Spring Boot使用Spring Session解決分散式會話共享問題

如果你正在使用Java開發Web應用,想必你對HttpSession非常熟悉,但我們知道HpptSession預設使用記憶體來管理Session,如果將應用橫向擴充套件將會出現Session共享問題。 Spring Session提供了一套建立和管理Servlet Ht

Spring Boot統一日誌解決方案

日誌是整個系統中非常重要的一環,JAVA中也有很多日誌框架,本文實現了在Spring Boot中利用logback和aop統一處理日誌。本文比較簡單,已記錄為主O(∩_∩)O~ 首先在resources目錄下新建logback-spring.xml作為logba

spring-bootspring.jackson.date-format失效及解決辦法

spring-boot 版本 <parent> <groupId>org.sp

spring boot Spring data jpa數據庫表字段命名策略

_id -s ber data 駝峰命名 org body strategy 命名 spring boot 中Spring data jpa命名策略 數據庫,表字段命名是駝峰命名法(UserID),Spring data jpa 自動更新之後是 user_id, 表字段不對

spring bootspring security實現單點登入,傳統模式(一)

單點登入是什麼? 一個系統中可能會引用別的很多系統。單點登入就是解決,一次登入,就可以訪問所有的系統。 每次瀏覽器向一個域名傳送http請求,會去查詢域名的cookie資訊拼接到http的header中傳送到伺服器。 cookie不能跨域。這個域是瀏覽器請求的域名,哪怕他們都是訪問一

spring boot spring security使用資料庫儲存許可權

WebSecurityConfig package com.maven; import javax.sql.DataSource; import org.springframework.beans.factory.annotation.Autowire

Spring boot 整合Spring Security過程的出現的關於Session scope的異常排查及解決方案

背景介紹 最近做的一個專案,其一需要用到Spring 的oauth認證功能, 其二需要對spring 的ContextRefreshedEvent 這個事件進行監聽,實現一部分自定義註解的功能(具體功能不作贅述),本來以為毫不相關的兩個功能,卻出現了一些意料之

關於Spring boot讀取屬性配置文件出現中文亂碼的問題的解決(針對application.properties)

HA inf encoding 屬性 文件中 ide for 出現 spring 兩種方法: 方法一:在配置文件中設置中文編碼: banner.charset=utf-8server.tomcat.uri-encoding=UTF-8spring.http.encoding

spring boot 使用redis session

錯誤 dap isa name art res 5.0 fir sync   spring boot 默認的httpsession是存在內存中。這種默認方式有幾個缺點:1、當分布式部署時,存在session不一致的問題;2、當服務重啟時session就會丟失,這時候用戶就需

Spring Boot使用WebSocket總結(三):使用訊息佇列實現分散式WebSocket

在上一篇文章(www.zifangsky.cn/1359.html)中我介紹了服務端如何給指定使用者的客戶端傳送訊息,並如何處理對方不線上的情況。在這篇文章中我們繼續思考另外一個重要的問題,那就是:如果我們的專案是分散式環境,登入的使用者被Nginx的反向代理分配到多個不同伺服器,那麼在其中一個伺服器建立了W

spring-boot+Redis實現簡單的分散式叢集session共享

  寫在前面:      首先宣告,筆者是一名Java程式設計屆的小學生。前面一直在幾家公司裡面做開發,其實都是一些傳統的專案,對於像分散式啦,叢集啦一些大型的專案接觸的很少,所以一直沒有自己整合和實現過。由於最近幾天專案不是很忙,自己又有點時間

基於 spring-session 解決分散式 session 共享問題

摘要:本文主要研究 基於 spring-seesion 解決分散式 session 的共享問題。首先講述 session 共享問題的產生背景以及常見的解決方案;然後講解本文主要研究的 spring-session 的概念和功能;接著演示了 spring-session 的兩種

記一次spring bootMongoDB Prematurely reached end of stream的異常解決

  在spring boot專案中使用了mongodb,當一段時間沒有操作mongodb,下次操作mongodb時就會出現異常。異常如下: org.springframework.data.mongodb.UncategorizedMongoDbException: Prematurely reached

springboot全域性異常處理(包含404錯誤處理) 一:解決spring bootrest介面404,500等錯誤返回統一的json格式(備用地址) 二:SpringBoot入門——區域性與全域性的異常處理(備用地址)

個人整理參考文件: 一:解決spring boot中rest介面404,500等錯誤返回統一的json格式(備用地址) 二:SpringBoot入門——區域性與全域性的異常處理(備用地址) 三:SpringBoot全域性異常處理(備用地址) 四:sprin

解決spring bootrest介面404,500等錯誤返回統一的json格式

在開發rest介面時,我們往往會定義統一的返回格式,列如: { "status": true, "code": 200, "message": null, "data": [ { "id": "101", "name": "jack" },

Spring Boot解析屬性首字母為大寫的Json串的解決方案

  假設收到Post方法HTTP報文,其body部分內容如下: { "AuditState" : "pass", "CurPage": "0", "PageSize": 10, "Status": "refuse" } 為處理此請求,Controller定義如下: @Req

Spring Boot 整合Spring Session 通過Redis實現分散式共享Session

一、首先我們要引入依賴,修改pom.xml新增: //引入spring session <dependency> <groupId>org.springframework.session</groupId> <artifactId>

解決Spring boot使用Gson,Swagger2 api-docs無法正常顯示json問題

由於專案中存在自定義型別,而Jackson的序列化與反序列化又不太會玩,轉而使用Gson,由於有生成Restful API文件的需求,使用Swagger2,最終api-docs無法正常顯示(使用Jack

Spring bootSession Factory的使用

@Aspect @Configuration public class TxAdviceInterceptor { // 超時時間 單位秒 private static final int TX_METHOD_TIMEOUT = 5; private static final String A

關於Spring boot讀取屬性配置檔案出現中文亂碼的問題的解決

 問題描述 當在.properties的配置檔案中有中文時,讀取出來的總是亂碼。比如我的application.properties配置檔案的內容如下: server.port=9090 test.msg=你好:Springboot 當在程式中讀取test