Spring Sessionによる分散型Session共有

11697 ワード

以前は分散環境でsession共有の問題を解決する必要がありましたが、tomcatなどのservletコンテナが提供するクラスタ構成を使用してsessionのレプリケーションの問題を解決することが多いです.今日は簡単な解決策を紹介します.
http://docs.spring.io/spring-session/docs/current/reference/html5/guides/httpsession.html#updating-dependenciesここではspring sessionの詳細について説明しますが、その使用もかなり簡単です.
1
1.依存の追加
  
<dependency>
    <groupId>org.springframework.sessiongroupId>
    <artifactId>spring-session-data-redisartifactId>
    <version>1.2.0.RELEASEversion>
dependency>

2. spring-mvc.xmlプロファイルの追加:
    
    <context:annotation-config/>
    <bean id="redisHttpSessionConfiguration"  class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration" >
        <property name="maxInactiveIntervalInSeconds" value="120" />
     bean>
    <bean
        class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        
        <property name="hostName" value="192.168.0.48" />
        <property name="port" value="6379" />
    bean>


3. web.xml追加
    <context-param>
        <param-name>contextConfigLocationparam-name>
        <param-value>classpath:spring-mvc.xmlparam-value>
    context-param>
    
    <filter>
        <filter-name>springSessionRepositoryFilterfilter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxyfilter-class>
    filter>
    <filter-mapping>
        <filter-name>springSessionRepositoryFilterfilter-name>
        <url-pattern>/*url-pattern>
    filter-mapping>


 
これにより分散セッションが実現される.
注意:1.Springのこのプロファイルは必ずwebに書かなければなりません.xmlの部分は、他の場所に書いてはいけません.
     2.フィルタの名前はspringSessionRepositoryFilterでなければなりません
     3.shiroを使ったら、web.xmlでは必ず一番前に置いて、shiroのFilter構成を書き、spring-sessionのFilter構成を書きます.後は他の符号化とservlet構成です.
個人的な理解:spring-sessionはオリジナルのsessionを指定した方法で格納するだけなので、sessionの操作については、何の修正もなく、侵入もなく、装飾者モードです.理解する人は自然に理解して、理解しない人は自分で体得しましょう.