欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring session實現(xiàn)Session共享

 更新時間:2023年04月14日 14:41:12   作者:Sivan_Xin  
本文主要介紹了Spring session實現(xiàn)Session共享,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

Redis session

用戶第一次訪問應用,會創(chuàng)建一個新的Session,并且會將Session的ID作為Cookie緩存在瀏覽器。下一次訪問請求時,請求的頭部會帶有Cookie。應用通過Session ID進行查找。如果Session存在并且有效,就會繼續(xù)請求。

為什么使用session共享:

如果沒有Session共享,session的信息放在內(nèi)存中,如果Tomcat關(guān)閉,內(nèi)存中的Session就會銷毀。在多實例(多個Tomcat)中無法共享,導致一個用戶只能訪問一個實例。

在實現(xiàn)共享后,只要Cookie中的Session ID 無法改變,多實例的任意一個被銷毀,都不會影響用戶訪問。

  • 有了session共享,即使服務(wù)器重啟也不需要重新登錄。
  • 假設(shè)某個網(wǎng)站是由多臺服務(wù)器提供服務(wù),nginx采用輪詢機制做負載均衡,那么同一個IP訪問該網(wǎng)站時,請求就可能會被分配到不同的服務(wù)器上,如果 session 沒有 實現(xiàn)共享 ,就會出現(xiàn)重復登陸授權(quán)的情況。
  • 注意,瀏覽器不能關(guān)閉,因為瀏覽器的cookie是會話級別的,瀏覽器關(guān)閉就會失效。

session 共享原理:

當請求進來的時候,SessionRepositoryFilter 會先攔截到請求,將 request 和 response 對象轉(zhuǎn)換成 SessionRepositoryRequestWrapper 和 SessionRepositoryResponseWrapper 。后續(xù)當?shù)谝淮握{(diào)用 request 的getSession方法時,會調(diào)用SessionRepositoryRequestWrapper 的getSession方法。這個方法是被重寫過的,邏輯是先從 request 的屬性中查找,如果找不到;再查找一個key值是"SESSION"的 Cookie,通過這個 Cookie 拿到 SessionId 去 Redis 中查找,如果查不到,就直接創(chuàng)建一個RedisSession 對象,同步到 Redis 中。

說的簡單點就是:攔截請求,將之前在服務(wù)器內(nèi)存中進行 Session 創(chuàng)建銷毀的動作,改成在 Redis 中創(chuàng)建。

Spring Session提供了一套創(chuàng)建和管理Servlet HTTPSession的方案,Spring Session提供了集群Session功能,默認采用外置的Redis來存儲Session數(shù)據(jù),以此來解決Session共享問題。

使用過濾器攔截請求

<!-- spring session共享filter -->
  <!-- 該過濾器必須是第一個過濾器,所有的請求經(jīng)過該過濾器后執(zhí)行后續(xù)操作 -->
  <filter>
    <filter-name>springSessionRepositoryFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>springSessionRepositoryFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

配置Redis

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
? ? ? ?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
? ? ? ?xsi:schemaLocation="http://www.springframework.org/schema/beans
? ? ? ? ? ? ? ? ? ? ? ? ?http://www.springframework.org/schema/beans/spring-beans.xsd">

? ? <!--Jedis連接池的相關(guān)配置-->
? ? <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
? ? ? ? <!--最大連接數(shù), 默認8個-->
? ? ? ? <property name="maxTotal" value="100"></property>
? ? ? ? <!--最大空閑連接數(shù), 默認8個-->
? ? ? ? <property name="maxIdle" value="50"></property>
? ? ? ? <!--允許借調(diào) 在獲取連接的時候檢查有效性, 默認false-->
? ? ? ? <property name="testOnBorrow" value="true"/>
? ? ? ? <!--允許歸還 在return給pool時,是否提前進行validate操作-->
? ? ? ? <property name="testOnReturn" value="true"/>
? ? </bean>
? ? <!--配置JedisConnectionFactory-->
? ? <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
? ? ? ? <property name="hostName" value="192.168.175.100"/>
? ? ? ? <property name="port" value="6379"/>
? ? ? ? <property name="database" value="0"/>
? ? ? ? <property name="poolConfig" ref="jedisPoolConfig"/>
? ? </bean>
? ? <!-- 配置session共享 -->
? ? <bean id="redisHttpSessionConfiguration"
? ? ? ? ? class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
? ? ? ? <property name="maxInactiveIntervalInSeconds" value="600" />
? ? </bean>
</beans>

到此這篇關(guān)于Spring session實現(xiàn)Session共享的文章就介紹到這了,更多相關(guān)Spring session 共享內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • finally 一定會執(zhí)行(實例代碼)

    finally 一定會執(zhí)行(實例代碼)

    下面小編就為大家?guī)硪黄猣inally 一定會執(zhí)行(實例代碼)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • 在Spring中利用@Order注解對bean和依賴進行排序

    在Spring中利用@Order注解對bean和依賴進行排序

    在Spring框架中,@Order是一個經(jīng)常被忽視但非常重要的注解,在項目開發(fā)中,當我們需要維護bean的特定順序或者存在許多相同類型的bean時,這個注解就發(fā)揮了作用,這篇文章講的就是如何利用@Order注解對bean和依賴進行排序,需要的朋友可以參考下
    2023-11-11
  • 在springboot中添加mvc功能的正確姿勢講解

    在springboot中添加mvc功能的正確姿勢講解

    這篇文章主要介紹了在springboot中添加mvc功能的正確姿勢,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • mybatis中關(guān)于mapper的使用以及注意事項

    mybatis中關(guān)于mapper的使用以及注意事項

    這篇文章主要介紹了mybatis中關(guān)于mapper的使用以及注意事項,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Java中的cglib代理詳解

    Java中的cglib代理詳解

    這篇文章主要介紹了Java中的cglib代理詳解, 代理模式是一種設(shè)計模式,它可以為其他對象提供一種代理,以控制對該對象的訪問,可以在運行時動態(tài)地創(chuàng)建代理對象,而不需要手動編寫代理類的代碼,需要的朋友可以參考下
    2023-09-09
  • 什么是jsoup及jsoup的使用

    什么是jsoup及jsoup的使用

    jsoup是一款基于Java的HTML解析器,它提供了一套非常省力的API,不但能直接解析某個URL地址、HTML文本內(nèi)容,而且還能通過類似于DOM、CSS或者jQuery的方法來操作數(shù)據(jù),所以?jsoup?也可以被當做爬蟲工具使用,這篇文章主要介紹了什么是jsoup及jsoup的使用,需要的朋友可以參考下
    2023-10-10
  • 解決RestTemplate第一次請求響應速度較慢的問題

    解決RestTemplate第一次請求響應速度較慢的問題

    這篇文章主要介紹了解決RestTemplate第一次請求響應速度較慢的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Flowable執(zhí)行完畢的流程查找方法

    Flowable執(zhí)行完畢的流程查找方法

    這篇文章主要為大家介紹了Flowable執(zhí)行完畢的流程查找方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Java設(shè)計模式之抽象工廠模式(Abstract?Factory)

    Java設(shè)計模式之抽象工廠模式(Abstract?Factory)

    這篇文章主要為大家詳細介紹了Java設(shè)計模式之抽象工廠模式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • JavaWeb實現(xiàn)打印功能

    JavaWeb實現(xiàn)打印功能

    這篇文章主要介紹了JavaWeb實現(xiàn)打印功能的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-05-05

最新評論