2016-03-29 12 views
0

私は、アプリケーションレベルからRedisインスタンスへのユーザーセッションの移動を検討しています。私はドキュメント(http://docs.spring.io/spring-session/docs/current/reference/html5/#httpsession)に従ってすべてが正しくセットアップされていると信じていますが、私は予想していた動作を見ていないし、どこかのステップを逃したと思っています。SpringセッションHttpSessionがJSESSIONIDを完全に置き換えることができません

アプリケーションは、現在のHttpSessionを使用していますので、私は単にコンテキストに次を追加しました:

<context:annotation-config/> 
<util:constant static-field="org.springframework.session.data.redis.config.ConfigureRedisAction.NO_OP"/> 
<beans:bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"/> 
<beans:bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:host-name="HOSTNAME" p:port="6379" /> 

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

をアプリケーションは、ビルドを展開、およびロードページはうまくいきますが、ページのクッキーを見るとJSESSIONIDとSESSIONの両方があります。私が知っているJSESSIONIDはSpring Securityによって使用されており、SpringセッションでSESSIONが使用されているようです。私がredisを見ると、SESSIONが格納されているように見えます。

別の問題は、カスタムセッションオブジェクト(session.setAttributeを使用して追加)がセッションに表示されないということです。セッションで表示されるのはログイン後のものだけで、SPRING_SECURITY_CONTEXTオブジェクトです。春のセッションフィルタを削除すると、これらのオブジェクトがセッションに正しく追加されます。

これは正常な動作ですか、設定が間違っていますか?

+0

https://stackoverflow.com/questions/44303504/spring-session-unable-save-session-to-redis –

答えて

2

私は同じ問題を抱えていましたが、最終的にはweb.xmlに宣言されているフィルタの順序が間違っていることが判明しました。リクエストが通過した最初のフィルタは、レスポンスにJSESSIONIDクッキーを設定していた春のセキュリティフィルタでした。そして、春のセッションリポジトリフィルタが独自のSESSIONクッキーを設定していました。 Springセッションリポジトリフィルタがその処理を最初に実行するように順序を変更した後、すべて正常に動作します。

+0

これが問題として確認されました。ありがとう! – Dave4988

+0

https://stackoverflow.com/questions/44303504/spring-session-unable-save-session-to-redis –

+0

保存された私の人生:) thanks – MarianP

関連する問題