日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
在SpringBoot中使用SpringSession解決分布式會(huì)話共享問題

在SpringBoot中使用Spring Session解決分布式會(huì)話共享問題

作者:簡(jiǎn)單的土豆 2020-03-20 14:48:46

后端
分布式 如果你正在使用Java開發(fā)Web應(yīng)用,想必你對(duì)HttpSession非常熟悉,但我們知道HpptSession默認(rèn)使用內(nèi)存來管理Session,如果將應(yīng)用橫向擴(kuò)展將會(huì)出現(xiàn)Session共享問題。

成都創(chuàng)新互聯(lián)專注于霸州企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計(jì),商城系統(tǒng)網(wǎng)站開發(fā)。霸州網(wǎng)站建設(shè)公司,為霸州等地區(qū)提供建站服務(wù)。全流程按需定制設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

前言

如果你正在使用Java開發(fā)Web應(yīng)用,想必你對(duì)HttpSession非常熟悉,但我們知道HpptSession默認(rèn)使用內(nèi)存來管理Session,如果將應(yīng)用橫向擴(kuò)展將會(huì)出現(xiàn)Session共享問題。

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

Session共享的問題

HttpSession是通過Servlet容器創(chuàng)建和管理的,像Tomcat/Jetty都是保存在內(nèi)存中的。如果我們將Web應(yīng)用橫向擴(kuò)展搭建成分布式的集群,然后利用LVS或Nginx做負(fù)載均衡,那么來自同一用戶的Http請(qǐng)求將有可能被負(fù)載分發(fā)到兩個(gè)不同的實(shí)例中去,如何保證不同實(shí)例間Session共享成為一個(gè)不得不解決的問題。

最簡(jiǎn)單的解決方法就是把Session數(shù)據(jù)保存到內(nèi)存以外的一個(gè)統(tǒng)一的地方,例如Memcached/Redis中。那么問題又來了,如何替換掉Servlet容器創(chuàng)建和管理HttpSession的實(shí)現(xiàn)呢?

  1.  利用Servlet容器提供的插件功能,自定義HttpSession的創(chuàng)建和管理策略,并通過配置的方式替換掉默認(rèn)的策略。不過這種方式有個(gè)缺點(diǎn),就是需要耦合Tomcat/Jetty等Servlet容器的代碼。這方面其實(shí)早就有開源項(xiàng)目了,例如memcached-session-manager,以及tomcat-redis-session-manager。暫時(shí)都只支持Tomcat6/Tomcat7。

      2.  配置Nginx的負(fù)載均衡算法為ip_hash,這樣每個(gè)請(qǐng)求按訪問IP的hash結(jié)果分配,這樣來自同一個(gè)IP的訪客固定訪問一個(gè)后端服務(wù)器,有效解決了動(dòng)態(tài)網(wǎng)頁存在的Session共享問題

      3.  如果你使用Shiro管理Session,可以用Redis來實(shí)現(xiàn)Shiro 的SessionDao接口,這樣Session便歸Redis保管。

      4.  設(shè)計(jì)一個(gè)Filter,利用HttpServletRequestWrapper,實(shí)現(xiàn)自己的 getSession()方法,接管創(chuàng)建和管理Session數(shù)據(jù)的工作。Spring-Session就是通過這樣的思路實(shí)現(xiàn)的。

在Spring Boot中 集成 Spring Session

Spring Session 支持使用Redis、Mongo、JDBC、Hazelcast來存儲(chǔ)Session,這里以Redis為例。

1、引入Maven依賴(本示例使用dependencyManagement,如果你沒有使用它請(qǐng)?zhí)砑?version>標(biāo)簽)     

  
 
 
 
  1.   
  2.            org.springframework.boot  
  3.            spring-boot-starter-data-redis  
  4.          
  5.          
  6.            org.springframework.session  
  7.            spring-session  
  8.         

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

  
 
 
 
  1. spring.session.store-type=redis 

僅此兩步,便集成完畢,整個(gè)過程完全無痛、無感~

注意:如果你的Redis服務(wù)器不是使用本地默認(rèn)配置(localhost:6379),需要配置你的Redis,如何配置?看這里。

我們來驗(yàn)證一下~

果然,Http Session已被Spring Session進(jìn)行包裝,我們可以依舊使用Http Session的API來進(jìn)行編程。

Cookies 也正常創(chuàng)建,Key為SESSION。

  
 
 
 
  1. 127.0.0.1:6379> keys *  
  2. 1) "spring:session:sessions:083706a8-b2d8-480c-8b88-eafc798e7269"  
  3. 2) "spring:session:sessions:expires:083706a8-b2d8-480c-8b88-eafc798e7269"  
  4. 3) "spring:session:expirations:1490263320000" 

使用redis-cli查看,發(fā)現(xiàn)Redis中也已保存相關(guān)數(shù)據(jù)。


分享題目:在SpringBoot中使用SpringSession解決分布式會(huì)話共享問題
本文路徑:http://www.5511xx.com/article/djsohoo.html