Spring Boot でWebアプリを開発していて、少し規模が大きくなり複数のAppサーバーを使用するときにいくつか課題がある。
その一つとしてセッションの問題がある。
Spring Bootではデフォルトでセッションをサーバー側に保存するため、複数のサーバーを使用する場合、クライアントが異なるサーバーにアクセスするとセッションを維持できない。
そこで複数のサーバーで共有するなど、解決方法はいくつか考えられる。
- セッション情報をDBだったりRedisのようなKVSに保存する
- WebサーバーStickysessionを使う
「1.」 は良い方法ですが、セッション情報を保存するサーバーの運用、性能、冗長性など余計な管理が増えてしまう。
「2.」 は容易に実現できるが、同一のAppサーバーにアクセスする必要があるので、増減を動的に行うのが難しい。
そこでセッション情報をcookieのようなクライント側に保存する方法が良いのではと思う。
例えばPlay frameworkではセッションの実態はcookieを使用している。
https://www.playframework.com/documentation/2.6.x/SettingsSession#Configuring-the-session-cookie
これをSpring Bootで実現するときに参考にしたサイトをメモ。
http://www.svlada.com/jwt-token-authentication-with-spring-boot/
https://qiita.com/nyasba/items/f9b1b6be5540743f8bac