日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【spring-session】多项目实现session共享

發(fā)布時間:2024/9/19 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【spring-session】多项目实现session共享 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

  • spring-session 2.0.2.RELEASE
  • 通過 spring-session 可以實現(xiàn)在多項目之間共享 session 。
  • 此處不涉及跨域。

場景

  • 場景1:同一個項目(項目A),部署多個,在訪問任何一個時,均能夠共享session(即項目A的集群部署)。
  • 場景2:有2個項目(項目A、項目B),部署在同1個域名下,通過目錄區(qū)分訪問。在項目A登錄后,再進入項目B時,不需要再重新登錄。
  • 場景3:有2個項目(項目A、項目B),部署在同不同域名下。在項目A登錄后,再進入項目B時,不需要再重新登錄。

使用 spring-session 可以輕松處理以上場景。

如何實現(xiàn)session共享?

以上所列的場景,均為同域的情況。跨域問題,需要搭配其它方法。

場景1,只需要保證兩個實例均往同一個位置寫session,且從同一個位置讀session。比如講session保存到數(shù)據(jù)庫中,或者將session保存到redis中。 spring-session 可以實現(xiàn)通過數(shù)據(jù)庫或redis存取session。

場景2或場景3中,需要保證項目A和項目B在保存session時,使用了相同的域名和路徑。

場景2,假如項目A部署地址為:http://www.mydomain.com/projectA,項目B部署地址為:http://www.mydomain.com/projectB。項目A和項目B向cookie中保存session id時,均使用同一個域名(www.mydomain.com)和同一個路徑(/,即根路徑,即兩個項目的父級路徑)。spring-session 可以讓項目A和項目B獲取到相同的session id,再通過相同的session id從數(shù)據(jù)庫或redis中存取相同的session內容。

場景3,假如項目A部署地址為:http://projectA.mydomain.com/,項目B部署地址為:http://projectB.mydomain.com/。項目A和項目B向cookie中保存session id時,均使用同一個域名(mydomain.com,即兩個域名的父級域名)和同一個路徑(/,即根路徑)。spring-session 可以讓項目A和項目B獲取到相同的session id,再通過相同的session id從數(shù)據(jù)庫或redis中存取相同的session內容。

spring-session 如何控制 cookie

以 spring-session 2.0.2.RELEASE 為例。在SessionRepositoryFilter 中定義了httpSessionIdResolver(CookieHttpSessionIdResolver)屬性。在 CookieHttpSessionIdResolver 中定義了cookieSerializer(DefaultCookieSerializer)。spring-session 通過 DefaultCookieSerializer 控制cookie。

如果要改變寫入cookie中的域名或路徑,則需要配置DefaultCookieSerializer。

spring-boot中配置方法如下:

@Beanpublic DefaultCookieSerializer getDefaultCookieSerializer() {DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();cookieSerializer.setDomainName("mydomain.com");cookieSerializer.setCookieName("SESSION");cookieSerializer.setCookiePath("/");cookieSerializer.setUseBase64Encoding(false);return cookieSerializer;}

spring mvc中配置方法如下:

<bean id="defaultCookieSerializer" class="org.springframework.session.web.http.DefaultCookieSerializer"><property name="domainName" value="mydomain.com" /><property name="cookieName" value="SESSION" /><property name="cookiePath" value="/" /></bean>

DefaultCookieSerializer 配置

@Beanpublic DefaultCookieSerializer getDefaultCookieSerializer() {DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();//cookieSerializer.setDomainName("mydomain.com");cookieSerializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");cookieSerializer.setCookieName("SESSION");cookieSerializer.setCookiePath("/");cookieSerializer.setUseBase64Encoding(false);return cookieSerializer;}

spring mvc中配置方法如下:

<bean id="defaultCookieSerializer" class="org.springframework.session.web.http.DefaultCookieSerializer"><!--<property name="domainName" value="mydomain.com" /> --><property name="domainNamePattern" value="^.+?\\.(\\w+\\.[a-z]+)$" /><property name="cookieName" value="SESSION" /><property name="cookiePath" value="/" /><property name="useBase64Encoding" value="false" /></bean>
  • domainNamePattern : 域名的正則表達式。^.?\\.(\\w\\.[a-z]+)$ 是個通用寫法。如果正則表達式不匹配,則不會設置任何域。如果正則表達式匹配,則第一個分組將用作域。例如:https://child.mydomain.com的請求會將域設置為mydomain.com。http:// localhost:8080 /或https://192.168.1.100:8080/的請求將不對域名進行處理。因此,在切換域名時,不需要再做任何修改。
  • domainName : 域名。設置成你想使用的域名。應設置成項目所在域名的某個父級域名。
  • cookieName : session id的cookie名稱。
  • cookiePath : cookie path。
  • useBase64Encoding : 是否使用base64將session id進行編碼。

參考

如果遇到 spring-session 1.x與2.x 不兼容參考這里 : https://blog.csdn.net/sayyy/article/details/104198555

總結

以上是生活随笔為你收集整理的【spring-session】多项目实现session共享的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。