A.13 springboot session

4404 ワード

1.紹介
spirng sessionがサポートする特性
  • クラスタセッション.通常、水平拡張クラスタセッション共有
  • に使用される
  • ブラウザ上のマルチセッション(1ブラウザ複数セッション)
  • RESTful APIsでsession
  • を提供
  • websocketでsession
  • を提供
  • は、クッキー
  • に依存することなく、HTTPプロトコルヘッダにセッションidを渡す.
    参考資料
  • https://docs.spring.io/spring-session/docs/1.2.2.RELEASE/reference/html5/
  • https://docs.spring.io/spring-boot/docs/1.4.7.RELEASE/reference/htmlsingle/#boot-features-session

  • Spring sessionがサポートするストレージ方式
  • redis
  • jdbc
  • mongo
  • hazelcast
  • hashmap
  • none

  • 参照:org.springframework.boot.autoconfigure.session.StoreType
    2.spring boot原生session
    spring bootはtomcatを統合しているため、sessionは自然にtomcatによって管理されます.
    spring-boot-starter-webパッケージではspring-boot-starter-tomcatのパッケージに依存しているため、POMにはspring-boot-starter-tomcatの導入は表示されない.
    tomcatのセッション管理に関する構成は以下の通りです.
    server.session.cookie.comment= # Comment for the session cookie.
    server.session.cookie.domain= # Domain for the session cookie.
    server.session.cookie.http-only= # "HttpOnly" flag for the session cookie.
    server.session.cookie.max-age= # Maximum age of the session cookie in seconds.
    server.session.cookie.name= # Session cookie name.
    server.session.cookie.path= # Path of the session cookie.
    server.session.cookie.secure= # "Secure" flag for the session cookie.
    server.session.persistent=false # Persist session data between restarts.
    server.session.store-dir= # Directory used to store session data.
    server.session.timeout= # Session timeout in seconds.
    server.session.tracking-modes= # Session tracking modes (one or more of the following: "cookie", "url", "ssl").
    

    3.spring boot集積spring session
    3.1紹介
    Spring bootはspringセッションの自動アセンブリも提供しています.
    Spring bootがspring sessionに提供するpomは以下のとおりです.
    
        org.springframework.session
        spring-session-data-gemfire
    
    
    
        org.springframework.session
        spring-session-data-mongo
    
    
    
        org.springframework.session
        spring-session-jdbc
    
    
    
        org.springframework.session
        spring-session-data-redis
    
    

    3.2 spirng session data redis
    spring bootではspring sessionによってredisにsessionを格納し、エコー共有の目的を達成し、後期サービスのレベル拡張をサポートします.
    統合手順:
    導入依存
    
      
      org.springframework.boot  
      spring-boot-starter-redis  
        
    
        org.springframework.session
        spring-session-data-redis
    
    

    接続redis
    # REDIS (RedisProperties)
    # Redis     (   0)
    spring.redis.database=0
    spring.redis.host=192.168.137.101
    spring.redis.port=6379
    # Redis       (    )
    spring.redis.password=
    #         (          )
    spring.redis.pool.max-active=8
    #            (          )
    spring.redis.pool.max-wait=-1
    #            
    spring.redis.pool.max-idle=8
    #            
    spring.redis.pool.min-idle=0
    #       (  )
    spring.redis.timeout=0
    

    义齿
    #   session     ,     spring.session.timeout    
    server.session.timeout=3600
    #spring.session.timeout=3600
    
    # sping session    redis      ,         redis ,session   key      
    #spring.session.redis.namespace=session
    
    # spring session      ,  pom     spring-session-data-redis        
    spring.session.store-type=REDIS
    
    # session      :ON_SAVE(  response commit   )、IMMEDIATE(  session.setAttrabute   )。  :ON_SAVE
    # spring.session.redis.flush-mode=
    

    4.よくある質問
    4.1他方式のセッション共有
    mongodb、jdbcなどの使用は、セッション外付けを永続化して共有する目的であり、spirngセッションdata redisと同様に統合されています.
    4.2タイムアウト設定
    Spring boot環境ではspring原生のコンテナ管理セッションを使用するもspringセッションを使用してもserverを使用することができる.session.timeout sessionのタイムアウト時間を設定します.
    注意:
  • springセッションを導入する場合springを使用することもできる.session.timeoutはタイムアウト構成を行います.
  • spring.session.timeoutの優先度はserverより高い.session.timeout
  • @EnableRedisHttpSession注記を追加するとserver.session.timeout/spring.session.timeoutは有効ではありません.注釈のプロパティでタイムアウト時間を設定する必要があります.
  • @EnableRedisHttpSession(maxInactiveIntervalInSeconds= 3600)