国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
基于Spring Session實現(xiàn)Session的分布式管理

Spring Session作為Spring社區(qū)官方推薦的一個比較簡單快速的Java Web分布式session解決方案,幫我們搞定了長期以來比較蛋疼的session分布式的問題。


Spring Session解決的基本思路很簡單,即將用戶的session信息全部存放到一個redis數(shù)據(jù)庫中,所有的session都從這個數(shù)據(jù)庫拿。由于redis是一個內(nèi)存數(shù)據(jù)庫,數(shù)據(jù)信息讀寫是非??焖俚?。如此一來,多個Tomcat,共用一個redis數(shù)據(jù)庫,即實現(xiàn)了session的共享問題。

工具/原料

  • Spring Session
  • Redis

方法/步驟

  1. 1

    訪問Spring Session官方網(wǎng)站:

    在百度中查詢Spring Session即可找到Spring Session的官方站點。

    目前版本為1.0.2,1.0.3版本處于snapshot狀態(tài)。

    Spring指出,Spring Session具有如下能力:

    (1) API and implementations for managing a user's session

    (2) HttpSession - allows replacing the HttpSession in an application container (i.e. Tomcat) neutral way

    (2-1)Clustered Sessions - Spring Session makes it trivial to support clustered sessions without being tied to an application container specific solution.

    (2-2)Multiple Browser Sessions - Spring Session supports managing multiple users' sessions in a single browser instance (i.e. multiple authenticated accounts similar to Google).

    (2-3)RESTful APIs - Spring Session allows providing session ids in headers to work with RESTful APIs

    (3) WebSocket - provides the ability to keep the HttpSession alive when receiving WebSocket messages

  2. 對Spring Session有了基本了解之后,可以開始配置Maven的pom.xml,導(dǎo)入SpringSession的jar包

    Spring官方文檔指出,要使用Spring Session,配置如下依賴即可:

    <dependency>

               <groupId>org.springframework.session</groupId>

                <artifactId>spring-session-data-redis</artifactId>

                <version>1.0.2.RELEASE</version>

    </dependency>

    實際上,spring-session-data-redis并不是一個實際的jar包,只不過它配置了其他的四個依賴:

  3. Spring-session-data-redis是一個空的包,我們可以從如下截圖中看出。Spring-session-data-redis僅僅只有一個META-INF文件夾。它的作用就在于引入其他四個包。

  4. 當(dāng)然,實際上你也可以不配置spring-session-data-redis,而直接配置實際上導(dǎo)入的類:

    <!-- Redis -->

    <dependency>

        <groupId>org.springframework.data</groupId>

        <artifactId>spring-data-redis</artifactId>

        <version>1.4.2.RELEASE</version>

    </dependency>

     

    <dependency>

        <groupId>redis.clients</groupId>

        <artifactId>jedis</artifactId>

        <version>2.5.2</version>

    </dependency>

     

    <!-- Spring Session -->

    <dependency>

           <groupId>org.springframework.session</groupId>

           <artifactId>spring-session</artifactId>

           <version>1.0.2.RELEASE</version>

    </dependency>

     

    <dependency>

          <groupId>org.apache.commons</groupId>

          <artifactId>commons-pool2</artifactId>

          <version>2.2</version>

    </dependency>

    我們這里,首先,配置spring-data-redis和jedis,這樣,就可以使用spring-data-redis框架,來實現(xiàn)訪問redis數(shù)據(jù)庫。

    spring-data-redis是spring的一個子項目,和spring-session一樣。spring-session要訪問redis,這里spring-session依賴spring-data-redis,來實現(xiàn)操作reids數(shù)據(jù)庫。

  5. Spring Core、Spring Web需要配置4.x版本。

    當(dāng)然,Spring Session還需要把Spring Web等常見的Spring包引入。Spring Session 1.0.2依賴Spring的版本為4.1.6以上,因此,3.x版本的Spring是無法使用的:

    可以從Maven Repository查看依賴情況:http://mvnrepository.com/artifact/org.springframework.session/spring-session/1.0.2.RELEASE

    此外,注意javax.servlet-api需要3.0.1版本以上。

  6. 配置application-context.xml文件

    這里,我們以使用xml配置方式為例,當(dāng)然也可以使用注解配置,詳見SPring的官方例子(見參考資料)

    備注:xml的配置方法官方給出了一個例子:http://docs.spring.io/spring-session/docs/1.0.2.RELEASE/reference/html5/guides/httpsession-xml.html

    在application-context.xml文件中,加入:

    <context:annotation-config/> 

    <bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"/>  

    <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig" />    

    <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:host-name="${redis.host}" p:port="${redis.port}" p:password="${redis.pass}"  p:pool-config-ref="poolConfig"/>

    其中,${redis.host}等即redis數(shù)據(jù)庫的服務(wù)器地址,端口,密碼等信息,放在properties文件中即可。

  7. 修改web.xml,加入Spring Session的Filter

    在web.xml文件中,加入:

    <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>

    這樣,所有的請求,都會被DelegatingFilterProxy處理,實際上,DelegatingFilterProxy會找到springSessionRepositoryFilter,創(chuàng)建它。每一次的請求還是由springSessionRepositoryFilter來過濾的。

    The DelegatingFilterProxy will look up a Bean by the name of springSessionRepositoryFilter and cast it to a Filter. For every request that DelegatingFilterProxy is invoked, the springSessionRepositoryFilter will be invoked.

    這里,Spring加入了一個Filter,其本質(zhì)是:對每一個請求的request進行了一次封裝。那么,在Controller里面拿出的request實際上是封裝后的request,

    調(diào)用request.getSession()的時候,實際上拿到是Spring封裝后的session。這個session則存儲在redis數(shù)據(jù)庫中。

  8. 訪問Web項目,查看session

    訪問Web項目,這個時候,使用redis-cli進入redis命令操作界面,在使用keys *可以查看所有的key:

  9. 第一個是當(dāng)前訪問的用戶的session信息,第二個保存的是過期的時間。

    可以查看session的詳細(xì)內(nèi)容如下:

  10. 可以看出,session對象被序列化后存入。因此,所有放入session的對象,都要實現(xiàn)Serializable接口。比如,我將所有的用戶信息,封裝到一個Authentication對象,那么

    這對象就必須實現(xiàn)Serializable接口:

  11. 補充一下:

    如果要設(shè)置Session的過期時間,通常我們會在web.xml文件中進行設(shè)置:

    但是,使用Spring Session托管session后,這里的設(shè)置將會失效。我們要專門為Spring Session進行設(shè)置:

    將application-context.xml,即步驟4中的的RedisHttpSessionConfiguration,設(shè)置其maxInactiveIntervalInSeconds屬性即可。注意,maxInactiveIntervalInSeconds的的單位是秒! 如下將設(shè)置session為10分鐘過期!

    <bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">

            <property name="maxInactiveIntervalInSeconds" value="600"></property>

    </bean>



本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Spring的applicationContext.xml文件
使用websocket遇到的一個小問題 The remote endpoint was in state [TEXT
[互聯(lián)網(wǎng)] 利用springsession解決共享Session問題 | 軟件世界網(wǎng)
單點登錄與消息隊列以及在J2EE中的實現(xiàn)方案 – 碼農(nóng)網(wǎng)
spring-session Redis實現(xiàn)Session共享
spring boot 實際應(yīng)用(六) session共享問題
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服