解決分布式環境下session共享問題

在分布式環境下,session會存在兩個問題

第一個問題:不同域名下,瀏覽器存儲的jsessionid是沒有存儲的。比如登錄時認證服務auth.gulimall.com存儲了session,但是搜索服務search.gulimall.com是沒有這個session的;

第二個問題:即使域名相同,但是分布式的服務在相同的服務里面有多個服務集群部署的,用戶每次訪問的時候,不能總是訪問同一個服務,可能到了其他的服務,由于采用了負載均衡,有可能這次請求分發給node1服務處理,下次請求分發給node2處理,node2是沒存儲有node1的session的。

解決辦法:

第一種方式:配置tomcat

這種的只適用于3-5個tomcat服務的時候,可以使用,在分布式情況下不適合的。

存在的問題:帶寬問題,相互同步需要消耗網絡傳輸時間。tomcat內存問題,每一個tomcat都要存儲其他tomcat對應的數據消耗內存。

第二種方式:

在客戶端將所有的數據存儲到cookie中,但是這是存在安全隱患的對應的數據可以被修改,而且cookie存儲的數據是有限的只有4K。這種一般不用。

第三種方案:

選擇hash一致性,也就是用戶訪問的時候,總是訪問同一個服務。這里是修改nginx的配置,也可以結合業務字段,sid是456就到另一臺服務器,其他的到另外一臺服務器。

第四種方式:

使用公共的區域進行存儲session,比如redis,數據庫或者存儲的更快的非關系型數據庫。

?下面是解決問題一的問題

解決子域共享問題

用戶通過瀏覽器登錄會員服務,會員服務會將其對應的用戶信息存儲到內存session中,但是這里我們不將其用戶的信息存儲內存session中,我們將其對應的用戶的信息存儲到redis。接下來給瀏覽器發卡,我們將其對應的域名放大,這樣對應的子域名也可以可以訪問對應的域名放大jessionid里面的數據。

解決方案:

引入SpringSession和使用:

需要注意:1.SpringSession有自動延期:redis中的數據也是有過期時間

? ? ? ? ? ? ? ? ? 2.哪里需要SpingSesson,哪里就需要配置。都要配置。

實現步驟:

1.添加依賴
<dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId>
</dependency>
2.配置文件中添加配置
spring.session.store-type=redis # Session store type.#下面的是配置可以不加,這里可以添加一個過期時間
server.servlet.session.timeout= # Session timeout. If a duration suffix is not specified, seconds is used.
spring.session.redis.flush-mode=on-save # Sessions flush mode.
spring.session.redis.namespace=spring:session # Namespace for keys used to store sessions.
3.開啟EnableRedisHttpSession注解:

4.添加配置類,默認使用jdk序列化,可讀性差,這里系統化轉成Json,?方便閱讀
@Configuration
public class GulimallSessionConfig {@Beanpublic CookieSerializer cookieSerializer(){DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();//放大整個系統域的作用域,使用主域名,這樣帶這個的二級域名也能讀取到sessioncookieSerializer.setDomainName("gulimall.com");cookieSerializer.setCookieName("GULISESSION");return cookieSerializer;}/*** 序列化機制* @return*/@Beanpublic RedisSerializer<Object> springSessionDefaultRedisSerializer() {return new GenericJackson2JsonRedisSerializer();}
}
?5.在業務代碼中使用session存儲用戶信息
session.setAttribute(AuthServerConstant.LOGIN_USER,data);

?注意:存儲到session的實體類一定要系列化,否則會報異常

public class MemberRespVo implements Serializable{}
6.前端引用:${user.nickname}

總結:需要使用SpringSession的服務依照上面的步驟實現:pom添加依賴,-->application配置類指定spring.session.story.type=redis-->添加config配置類,-->在啟動類或配置類添加注解@EnableRedisHttpSession,然后在前端中進入引用即可。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/41748.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/41748.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/41748.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于SpringBoot的校園臺球廳人員與設備管理系統

本系統是要設計一個校園臺球廳人員與設備管理系統&#xff0c;這個系統能夠滿足校園臺球廳人員與設備的管理及用戶的校園臺球廳人員與設備管理功能。系統的主要功能包括首頁、個人中心、用戶管理、會員賬號管理、會員充值管理、球桌信息管理、會員預約管理、普通預約管理、留言…

【SSRF】

SSRF &#xff08;Server-Side Request Forgery 服務端請求偽造&#xff09; 文章目錄 0x01 是什么&#xff1f;0x02 怎么判斷是否存在SSRF漏洞&#xff1f;0x03 防御0x04 繞過手段 0x01 是什么&#xff1f; 是什么&#xff1f; ??答&#xff1a;攻擊者構造請求&#xff0c;…

w3wp.exe 中發生未處理的 Microsoft ,NETFramework 異常。

&#x1f3c6;本文收錄于「Bug調優」專欄&#xff0c;主要記錄項目實戰過程中的Bug之前因后果及提供真實有效的解決方案&#xff0c;希望能夠助你一臂之力&#xff0c;幫你早日登頂實現財富自由&#x1f680;&#xff1b;同時&#xff0c;歡迎大家關注&&收藏&&…

Spring 6.1.10版本源碼編譯

每篇一句 我們對時間的感知其實非常主觀&#xff0c;我們越習慣于我們的生活方式&#xff0c;生活里面的新鮮感就越少&#xff0c;我們對時間 的感知就越快&#xff0c;生命就越短。 1.源碼下載 進入Spring官網 https://spring.io/ 按照上圖步驟進入如下Spring Framework鏈…

羅劍鋒的C++實戰筆記學習(二):容器、算法庫、多線程

4、容器 1&#xff09;、容器的通用特性 所有容器都具有的一個基本特性&#xff1a;它保存元素采用的是值&#xff08;value&#xff09;語義&#xff0c;也就是說&#xff0c;容器里存儲的是元素的拷貝、副本&#xff0c;而不是引用 容器操作元素的很大一塊成本就是值的拷貝…

RAG 工業落地方案框架(Qanything、RAGFlow、FastGPT、智譜RAG)細節比對!CVPR自動駕駛最in挑戰賽賽道,全球冠軍被算力選手奪走了

RAG 工業落地方案框架&#xff08;Qanything、RAGFlow、FastGPT、智譜RAG&#xff09;細節比對&#xff01;CVPR自動駕駛最in挑戰賽賽道&#xff0c;全球冠軍被算力選手奪走了。 本文詳細比較了四種 RAG 工業落地方案 ——Qanything、RAGFlow、FastGPT 和智譜 RAG&#xff0c;重…

git push之后回滾到某個版本

背景 因為粗心在主分支上修改了代碼&#xff0c;push了上去&#xff0c;污染了主分支&#xff0c;希望將主分支之后的修改回滾&#xff0c;包括提交記錄&#xff0c;就是遠程的記錄中回到希望回到的版本&#xff0c;保持干凈。 git push -f 可以做到&#xff0c;會沖掉所有的…

SwiftUI 6.0(iOS 18.0)滾動視圖新增的滾動階段(Scroll Phase)監聽功能趣談

何曾幾時&#xff0c;在 SwiftUI 開發中的禿頭小碼農們迫切需要一種能夠讀取當前滾動狀態的方法。 在過去&#xff0c;他們往往需要借助于 UIKit 的神秘力量。不過這一切在 SwiftUI 6.0 中已成“滄海桑田”。 在本篇博文中&#xff0c;您將學到如下內容&#xff1a; 1. Scroll…

一份適合新手的軟件測試練習項目

最近&#xff0c;不少讀者托我找一個能實際練手的測試項目。開始&#xff0c;我覺得這是很簡單的一件事&#xff0c;但當我付諸行動時&#xff0c;卻發現&#xff0c;要找到一個對新手友好的練手項目&#xff0c;著實困難。 我翻了不下一百個web網頁&#xff0c;包括之前推薦練…

nginx的知識面試易考點

Nginx概念 Nginx 是一個高性能的 HTTP 和反向代理服務。其特點是占有內存少&#xff0c;并發能力強&#xff0c;事實上nginx的并發能力在同類型的網頁服務器中表現較好。 Nginx 專為性能優化而開發&#xff0c;性能是其最重要的考量指標&#xff0c;實現上非常注重效率&#…

C#用鏈表和數組分別實現堆棧

1.鏈表 實現棧的四個基本功能 入棧 出棧 長度 棧頂值 public class 基礎 : MonoBehaviour {public class MyStack{//定義每一個元素的數據結構 //下一個元素 和 該元素的值public class StackData{public StackData next;public object data;public StackData(StackData next,…

linux驅動編程 - kfifo先進先出隊列

簡介&#xff1a; kfifo是Linux Kernel里面的一個 FIFO&#xff08;先進先出&#xff09;數據結構&#xff0c;它采用環形循環隊列的數據結構來實現&#xff0c;提供一個無邊界的字節流服務&#xff0c;并且使用并行無鎖編程技術&#xff0c;即當它用于只有一個入隊線程和一個出…

nginx修改網站默認根目錄及發布(linux、centos、ubuntu)openEuler軟件源repo站點

目錄 安裝nginx配置nginx其它權限配置 安裝nginx dnf install -y nginx配置nginx whereis nginxcd /etc/nginx llcd conf.d touch vhost.conf vim vhost.conf 命令模式下輸入:set nu或:set number可以顯示行號 復制如下內容&#xff1a; server {listen 80;server_name…

【0294】Postgres內核 dynahash 之 hash_search 實現原理

相關文章: 【0289】Postgres內核之哈希表(Hash Tables) 【0290】Postgres內核之dynahash(動態哈希表,dynamic hash tables)(概念篇) 【0291】Postgres內核之dynahash table 創建 【0292】Postgres內核源碼之dynahash 插入entry實現 【0293】Postgres內核之創建 dynahas…

ESP32 通過藍牙顯示歌詞代碼示例

通過藍牙協議播放音樂&#xff0c;有的時候需要顯示歌詞&#xff0c;這里就是a2dp庫獲取了歌詞 值得注意的是要想正確獲取到歌詞&#xff0c;必須打開各種播放器的字幕&#xff08;歌詞&#xff09;開關 本項目用了三個開源庫 a2dp&#xff0c;tft_espi,xfont. a2dp &#x…

基于python實現的監聽服務接口是否正常,發送異常消息到釘釘群

獲取釘釘機器人 創建釘釘群組(要求至少三個成員)進入群組 設置>機器人>添加機器人選擇自定義機器人 按照要求填寫完獲取到 Webhook的鏈接 實現代碼 from time import sleep import requests import json from datetime import datetime import logging# 配置日志記錄的…

數據結構第11節: B樹

B樹是一種自平衡的樹數據結構&#xff0c;它能夠保持數據排序&#xff0c;并且在插入、刪除和查找操作中具有對數時間復雜度。B樹廣泛應用于文件系統、數據庫和索引中&#xff0c;因為它們可以有效地處理大量數據。 B樹的特點&#xff1a; 所有葉子節點都位于同一層。每個節點…

【】AI八股-神經網絡相關

Deep-Learning-Interview-Book/docs/深度學習.md at master amusi/Deep-Learning-Interview-Book GitHub 網上相關總結&#xff1a; 小菜雞寫一寫基礎深度學習的問題&#xff08;復制大佬的&#xff0c;自己復習用&#xff09; - 知乎 (zhihu.com) CV面試問題準備持續更新貼 …

.net 調用海康SDK的跨平臺解決方案

??歡迎點贊 :?? 收藏 ?留言 ?? 如有錯誤敬請指正,賜人玫瑰,手留余香!??本文作者:由webmote 原創??作者格言:新的征程,我們面對的不僅僅是技術還有人心,人心不可測,海水不可量,唯有技術,才是深沉黑夜中的一座閃爍的燈塔序言 上2篇海康SDK使用以及常見的坑…

PCL 點云PFH特征描述子

點云PFH特征描述子 一、概述1.1 概念1.2 算法原理一、代碼實現二、結果示例一、概述 1.1 概念 點特征直方圖PFH(Point Feature Histograms)描述子:用于表示點云中每個點的局部幾何形狀信息,它是一種直方圖描述子,包括了點云的法線方向和曲率信息,PFH描述子可以幫助區分不同…