spring-session實現分散式session共享及自定義sessionid
好了,完工了。。。public class MyHttpSessionStrategy implements HttpSessionStrategy { private final Logger logger = LoggerFactory.getLogger(WlwHttpSessionStrategy.class); //這用Qualifier註解,如果你的工程還集成了spring-data-redis,需要指定一下用哪一個 @Qualifier("sessionRedisTemplate") @Autowired private RedisTemplate redisTemplate; //過期時間,與session過期時間保持一致 private Long maxInactiveIntervalInSeconds = 999L; private String xxxRedisName = "spring:session:xxx:"; //當客戶端沒有傳xxx引數的時候,避免建立多個無用的session佔用redis空間 private String defaultSessionId = "default-sessionid"; /** * 客戶端傳過來的是xxx,需要通過xxx查詢對映關係,拿到sessionid返回 */ public String getRequestedSessionId(HttpServletRequest request) { String xxx = request.getParameter("xxx"); ValueOperations<String, String> vops = redisTemplate.opsForValue(); if (xxx != null && !xxx.equals("")) { String sessionid = vops.get(xxxRedisName + xxx); if(sessionid!=null){ redisTemplate.expire(xxxRedisName + xxx, maxInactiveIntervalInSeconds, TimeUnit.SECONDS); } return sessionid; } else { return vops.get(xxxRedisName+defaultSessionId); } } /** * 建立session時,儲存xxx和sessionid的對映關係 */ public void onNewSession(Session session, HttpServletRequest request, HttpServletResponse response) { String xxx = request.getParameter("xxx"); String sessionid = session.getId(); ValueOperations<String, String> vops = redisTemplate.opsForValue(); if (xxx != null && !xxx.equals("")) { //儲存xxx和sessionid對映關係 vops.set(xxxRedisName + xxx, sessionid); redisTemplate.expire(xxxRedisName + xxx, maxInactiveIntervalInSeconds, TimeUnit.SECONDS); }else{ //沒有傳xxx時,儲存為預設 vops.set(xxxRedisName+defaultSessionId, sessionid); redisTemplate.expire(xxxRedisName+defaultSessionId, maxInactiveIntervalInSeconds, TimeUnit.SECONDS); } } public void onInvalidateSession(HttpServletRequest request, HttpServletResponse response) { String xxx = request.getParameter("xxx"); redisTemplate.expire(xxxRedisName + xxx, 0, TimeUnit.SECONDS); } }
相關推薦
spring-session實現分散式session共享及自定義sessionid
public class MyHttpSessionStrategy implements HttpSessionStrategy { private final Logger logger = LoggerFactory.getLogger(WlwHttpSessionStrategy.class
Spring Boot學習筆記-錯誤處理及自定義
正常的Web應用開發時,需要考慮到應用執行發生異常時或出現錯誤時如何來被處理,例如捕獲必要的異常資訊,記錄日誌方便日後排錯,友好的使用者響應輸出等等。 當然應用發生錯誤,有可能是應用自身的問題,也有可能是客戶端操作的問題。 Spring Boot預設提供了一種錯誤處理機制。 預設錯誤處理機制 預設情況下,S
spring-security認證過程的分析及自定義登入
首先spring-security配置認證過濾器,它是spring-security處理業務的入口。使用者如果不重寫過濾器,使用預設的過濾器UsernamePasswordAuthenticationFilter。它繼承了抽象類AbstractAuthentic
Spring Boot @Enable*註解原始碼解析及自定義@Enable*
Spring Boot 一個重要的特點就是自動配置,約定大於配置,幾乎所有元件使用其本身約定好的預設配置就可以使用,大大減輕配置的麻煩。其實現自動配置一個方式就是使用@Enable*註解,見其名知其意也,即“使什麼可用或開啟什麼的支援”。 ### Spring Boot 常用@Enable* 首先來簡
Spring Data實現分散式共享session
1、自定義HttpSession實現Session https://www.cnblogs.com/youzhibing/p/7348337.html 2、Spring整合Jedis2.9(叢集帶密碼版) https://blog.csdn.net/cslucifer/article/d
Spring Session + Redis實現分散式Session共享
通常情況下,Tomcat、Jetty等Servlet容器,會預設將Session儲存在記憶體中。如果是單個伺服器例項的應用,將Session儲存在伺服器記憶體中是一個非常好的方案。但是這種方案有一個缺點,就是不利於擴充套件。 目前越來越多的應用採用分散式部署,
使用Spring Session實現分散式的Session共享
之前在分散式環境下需要解決session共享的問題,更多的時候我們是使用servlet容器例如tomcat提供的叢集配置來解決session的複製問題。今天介紹一種簡單的解決方案。 1 1. 新增依賴 <dependency> <gro
springboot+redis實現分散式session共享
官方文件,它是spring session專案的redis相關的一個子文件:https://docs.spring.io/spring-session/docs/2.0.0.BUILD-SNAPSHOT/reference/html5/guides/boot
spring+redis自主實現分散式session(非spring-session方式)
背景:最近對一個老專案進行改造,使其支援多機部署,其中最關鍵的一點就是實現多機session共享。專案有多老呢,jdk版本是1.6,spring版本是3.2,jedis版本是2.2。 1.方案的確定 接到這專案任務後,理所當然地google了,一搜索,發現結果分為兩大類: tomcat的session管
基於 spring-session 解決分散式 session 共享問題
摘要:本文主要研究 基於 spring-seesion 解決分散式 session 的共享問題。首先講述 session 共享問題的產生背景以及常見的解決方案;然後講解本文主要研究的 spring-session 的概念和功能;接著演示了 spring-session 的兩種
Redis實現分散式session功能的共享
最近專案設計叢集,實現了一下session的共享功能,其原理是將session儲存到分散式快取資料庫中如:redis, memcache等,然後多個伺服器tomcat 每次請求都通過NoSql資料庫查詢,如果存在,則獲取值;反之存放值。 我是通過redis來實現
在Spring Boot中使用Spring Session解決分散式會話共享問題
如果你正在使用Java開發Web應用,想必你對HttpSession非常熟悉,但我們知道HpptSession預設使用記憶體來管理Session,如果將應用橫向擴充套件將會出現Session共享問題。 Spring Session提供了一套建立和管理Servlet Ht
SpringBoot整合Shiro,許可權的動態載入、更新,Shiro-Redis實現分散式Session共享
本文章是介紹SpringBoot整合Apache Shiro,並實現在專案啟動時從資料庫中讀取許可權列表,在對角色進行增刪改時,動態更新許可權以及在分散式環境下的Session共享,Session共享使用的是shiro-redis框架,是根據真實專案寫的一個Demo。網上有很
asp.net mvc 用Redis實現分散式叢集共享Session
1、這兩天研究Redis搞分散式session問題,網上找的資料都是用ServiceStack.Redis來實現的,但是在做效能測試的時候發現最新的v4版本有限制每小時候最多請求6000次,因為官網開始商業化要收費了,好坑爹的說,還好我前期弄了個性能測試列子,不然上線以後
redis實現分散式session共享
在講解redis分散式session共享之前,我們先聊聊tomcat中session管理機制,包括:請求過程中session操作,sessionid解析過程,servlet獲取session流程,以及tomca中session的管理機制。 Tomcat session管理機制 請求過程中的session操
Redis學習筆記~StackExchange.Redis實現分散式Session
回到目錄 對於多WEB的環境現在已經是必須的了,很難想像一臺WEB伺服器面對百萬併發的響應,所以,我們需要多臺WEB伺服器叢集合作,來緩解這種高併發,高吞吐的場景,而對於多WEB的場景又會有個問題出現,即session儲存的問題,如一個使用者登陸後,把一個狀態資訊儲存到當前WEB伺服器的session裡,而
Spring boot整合websocket實現分散式websocketsession共享(一)--基於redis的釋出訂閱
本文主要是針對分散式場景下的使用websocket的一個解決方案。我們以下面的圖來說明下業務使用場景。 針對如圖的情況,很多人第一時間想到的是websocket的session共享,這是大多數的第一反應。很遺憾的是,websocketsession是不支援序列化操作
shiro整合redis實現分散式session和單點登入
shiro是一款出色的許可權框架,能夠實現諸如登入校驗、許可權校驗等功能,預設情況下,shir將session儲存到記憶體中,這在應用分散式部署的情況下會出現session不一致的問題,所以我們要將session儲存到第三方,應用始終從第三方獲取session,從而保證分散式
ASP.NET Core中介軟體實現分散式 Session
1.1. 中介軟體原理 1.1.1. 什麼是中介軟體 中介軟體是段程式碼用於處理請求和響應,通常多箇中間件連結起來形成管道,由每個中介軟體自己來決定是否要呼叫下一個中介軟體。 1.1.2. 中介軟體執行過程 舉一個示例來演示中介軟體的執行過程(
shiro(四)整合redis實現分散式session
一、前言 前面的文章中,shiro使用的是ehcache做快取,這樣在單機服務中,沒有任何問題,但是如果是在叢集環境下,就無法實現session共享了。分散式session有多種實現方式: 1. Session Replication 方式管理 (即session複製)