SpringSession+redisのプロジェクトでの使用


詳細
1、前言、sessionはずっと私たちがクラスタを作るときに解決しなければならない難題であり、過去にserlvetコンテナから解決することができた.例えば、オープンソースservletコンテナ-tomcatが提供するtomcat-redis-session-manager、memcached-session-managerなど、springSessionを通じてクラスタ内のsessionの共有を実現することができる.
Spring Sessionは、ユーザー・セッション情報を管理するためのAPIと実装を提供し、アプリケーション・コンテナ固有のソリューションに限定されることなく、クラスタ・セッションをサポートします.
2、サポート機能
1)、springSessionは、redis、mysqlなどのサードパーティのストレージコンテナにセッションを格納することをサポートし、フレームワークはredis、jdbcなどの複数のセッションを格納するコンテナを提供する. 
2)、複数のブラウザセッション-Spring Sessionは、単一のブラウザインスタンス(つまりGoogleのような複数の認証済みアカウント)で複数のユーザーのセッションを管理し、同じブラウザで同じWebサイトで複数のセッション共有をサポートします. 
3)Restful API、Spring SessionはヘッダファイルにセッションIDを提供してRESTful APIを使用することを許可する
4)、WebSocket-HttpSessionがWebSocketメッセージを受信する時に活動を維持する能力を提供する.   
3、プロジェクト統合springSession、springbootを例に、redisストレージsessionを使用する.https://docs.spring.io/spring-session/docs/1.3.1.RELEASE/reference/html5/
1)、pomの追加

	org.springframework.session
	spring-session-data-redis

2)、springsessionの構成
@Configuration
//session    4  
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 14400)
public class SpringSessionConfig {

}

3)、springSessionのセッションID伝達方式インタフェース
           1.Cookie方式:CookieHttpSessionStrategy
           2.http header方式:HeaderHttpSessionStrategy
デフォルトはクッキー方式で実現されます
4)、デフォルトのセッションId伝達方式に基づいて、クッキー構成を追加する
#cookie  
server.session.cookie.name=MY_PROJECT_SESSION
#cookie    
server.session.cookie.domain=regulus.com
#  cookie   ,     
server.session.cookie.path=/

その他の構成
server.session.cookie.comment = #    cookie。
server.session.cookie.domain = #  cookie  。
server.session.cookie.http-only =#“HttpOnly”     cookie。
server.session.cookie.max-age = #  cookie     (     )。
server.session.cookie.name = #  cookie  。
server.session.cookie.path = #  cookie   。
server.session.cookie.secure = #“Secure”     cookie。
server.session.persistent = false #             。
server.session.store-dir = #           。
server.session.timeout = #    ( )。
server.session.tracking-modes =#      (       :“cookie”,“url”,“ssl”)。

5)、springSessionクッキーベースの構成
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 14400)
public class SpringSessionConfig {

    @Bean
    public CookieSerializer cookieSerializer(ServerProperties serverProperties) {
        Cookie cookie = serverProperties.getSession().getCookie();
        DefaultCookieSerializer bean = new DefaultCookieSerializer();
        if (cookie.getMaxAge() != null) {
            bean.setCookieMaxAge(cookie.getMaxAge());
        }
        if (cookie.getName() != null) {
            bean.setCookieName(cookie.getName());
        }
        if (cookie.getPath() != null) {
            bean.setCookiePath(cookie.getPath());
        }
        if (cookie.getDomain() != null) {
            bean.setDomainName(cookie.getDomain());
        }
        if (cookie.getHttpOnly() != null) {
            bean.setUseHttpOnlyCookie(cookie.getHttpOnly());
        }
        if (cookie.getSecure() != null) {
            bean.setUseSecureCookie(cookie.getSecure());
        }
        return bean;
    }

}

4、以上の配置に基づいて、プロジェクトの中でspringSessionを使うことができて、用法とsessionの用法は一致します