本篇內(nèi)容介紹了“在SpringBoot中怎么使用Spring Session解決分布式會(huì)話共享問(wèn)題”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
10余年的青云譜網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷型網(wǎng)站的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整青云譜建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“青云譜網(wǎng)站設(shè)計(jì)”,“青云譜網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
前言
如果你正在使用Java開(kāi)發(fā)Web應(yīng)用,想必你對(duì)HttpSession非常熟悉,但我們知道HpptSession默認(rèn)使用內(nèi)存來(lái)管理Session,如果將應(yīng)用橫向擴(kuò)展將會(huì)出現(xiàn)Session共享問(wèn)題。
Spring Session提供了一套創(chuàng)建和管理Servlet HttpSession的方案,以此來(lái)解決Session共享的問(wèn)題,更為重要的是在Spring Boot中使用它極其簡(jiǎn)單。
Session共享的問(wèn)題
HttpSession是通過(guò)Servlet容器創(chuàng)建和管理的,像Tomcat/Jetty都是保存在內(nèi)存中的。如果我們將Web應(yīng)用橫向擴(kuò)展搭建成分布式的集群,然后利用LVS或Nginx做負(fù)載均衡,那么來(lái)自同一用戶的Http請(qǐng)求將有可能被負(fù)載分發(fā)到兩個(gè)不同的實(shí)例中去,如何保證不同實(shí)例間Session共享成為一個(gè)不得不解決的問(wèn)題。
最簡(jiǎn)單的解決方法就是把Session數(shù)據(jù)保存到內(nèi)存以外的一個(gè)統(tǒng)一的地方,例如Memcached/redis中。那么問(wèn)題又來(lái)了,如何替換掉Servlet容器創(chuàng)建和管理HttpSession的實(shí)現(xiàn)呢?
利用Servlet容器提供的插件功能,自定義HttpSession的創(chuàng)建和管理策略,并通過(guò)配置的方式替換掉默認(rèn)的策略。不過(guò)這種方式有個(gè)缺點(diǎn),就是需要耦合Tomcat/Jetty等Servlet容器的代碼。這方面其實(shí)早就有開(kāi)源項(xiàng)目了,例如memcached-session-manager,以及tomcat-redis-session-manager。暫時(shí)都只支持Tomcat6/Tomcat7。
2. 配置Nginx的負(fù)載均衡算法為ip_hash,這樣每個(gè)請(qǐng)求按訪問(wèn)IP的hash結(jié)果分配,這樣來(lái)自同一個(gè)IP的訪客固定訪問(wèn)一個(gè)后端服務(wù)器,有效解決了動(dòng)態(tài)網(wǎng)頁(yè)存在的Session共享問(wèn)題
3. 如果你使用Shiro管理Session,可以用Redis來(lái)實(shí)現(xiàn)Shiro 的SessionDao接口,這樣Session便歸Redis保管。
4. 設(shè)計(jì)一個(gè)Filter,利用HttpServletRequestWrapper,實(shí)現(xiàn)自己的 getSession()方法,接管創(chuàng)建和管理Session數(shù)據(jù)的工作。Spring-Session就是通過(guò)這樣的思路實(shí)現(xiàn)的。
在Spring Boot中 集成 Spring Session
Spring Session 支持使用Redis、Mongo、JDBC、Hazelcast來(lái)存儲(chǔ)Session,這里以Redis為例。
1、引入Maven依賴(本示例使用dependencyManagement,如果你沒(méi)有使用它請(qǐng)?zhí)砑?lt;version>標(biāo)簽)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session</artifactId> </dependency>
2、配置你的Spring Application,將你的application.properties加入以下配置。
spring.session.store-type=redis
僅此兩步,便集成完畢,整個(gè)過(guò)程完全無(wú)痛、無(wú)感~
注意:如果你的Redis服務(wù)器不是使用本地默認(rèn)配置(localhost:6379),需要配置你的Redis,如何配置?看這里。
我們來(lái)驗(yàn)證一下~
果然,Http Session已被Spring Session進(jìn)行包裝,我們可以依舊使用Http Session的API來(lái)進(jìn)行編程。
Cookies 也正常創(chuàng)建,Key為SESSION。
127.0.0.1:6379> keys * 1) "spring:session:sessions:083706a8-b2d8-480c-8b88-eafc798e7269" 2) "spring:session:sessions:expires:083706a8-b2d8-480c-8b88-eafc798e7269" 3) "spring:session:expirations:1490263320000"
使用redis-cli查看,發(fā)現(xiàn)Redis中也已保存相關(guān)數(shù)據(jù)。
“在SpringBoot中怎么使用Spring Session解決分布式會(huì)話共享問(wèn)題”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
文章題目:在SpringBoot中怎么使用SpringSession解決分布式會(huì)話共享問(wèn)題
文章轉(zhuǎn)載:http://jinyejixie.com/article22/gceijc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、手機(jī)網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷推廣、關(guān)鍵詞優(yōu)化、服務(wù)器托管、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)