JavaベースのWebアプリケーション(モバイルクライアントとWebクライアントにサービスを提供します)のサーバー側で作業しており、ユーザー認証を実装する必要があります。本番環境では、ロードバランサーを備えた2台のサーバー(複製、同じDBに対して動作)があります。以前はSpringセキュリティを使用していたので、これが私にとって最も直感的な方法ですが、ここに私の問題があります。
Springセキュリティは(ユーザーがログインしたときに)DBに対してユーザーを1回認証し、その後の要求はセッションベースのトークンを使用して処理および認証されます。ここで、本番サーバーの1つがダウンしていると、セッションが失われます。つまり、ユーザーはある種の「不正な」応答を受け取ります。どうすればこれに対処できますか?
私は3つのオプションを考えました
- redisなどのKey-Valueストアを使用して、トークンをそこに保存します。そうすると、Springsのコアコードに干渉する必要があると思います。1回はユーザーがログインするとき(トークンをKey-Valueストアに保存する)、もう1回はユーザーを認証するとき(SpringのIn-ではなくこのKey-Valueストアに対して認証する)です。メモリHttpSessionSecurityContextRepository)。
- すべてのリクエストでDBに対してユーザーを認証する方法でSpringセキュリティを使用します(それが可能かどうかはわかりません)。
- スプリングセキュリティを使用せず、DBに対してすべてのリクエストを認証するために、フィルターまたはインターセプターを作成するだけです。これは、2つのことを意味します。1つは、クライアントがすべてのリクエスト(おそらくヘッダー内)にユーザー名とパスワードを適用する必要があること、もう1つは、すべてのリクエストについてDBにクエリを実行する必要があることです。
これらは私の考えです。もしあれば、それらについての洞察と新しい提案を得たいと思います。