ホームページ  >  記事  >  spring-security フィルターは Redis からセッション情報を取得しますか?

spring-security フィルターは Redis からセッション情報を取得しますか?

PHPz
PHPz転載
2024-02-09 22:30:08471ブラウズ

php エディター Zimo は、Spring Security フィルターが Redis からセッション情報を取得するかどうかに関する質問に答えます。 Spring Security は、認証および認可メカニズムの完全なセットを提供する強力なセキュリティ フレームワークです。デフォルトでは、Spring Security は HttpSession を使用してユーザーセッション情報を管理します。ただし、構成を使用すると、セッション情報を Redis などの外部ストレージに保存できます。これにより、分散セッション管理が実現でき、システムの拡張性が向上するというメリットがあります。したがって、Spring Security フィルターは Redis からセッション情報を取得できます。

質問内容

spring-boot、spring-security、spring-sessionを使用してログインシステムを実装し、セッションのストレージとしてredisを使用しようとしています。

私の構成:

リーリー

私のログイン コントローラー:

リーリー

および認証サービス:

リーリー

私の理解が正しければ

this.securitycontextholderstrategy.setcontext(context); 認証は、スレッドローカル コンテキストなど、アプリケーションのメモリに保持する必要があります。 ###そして### リーリー

セッション情報は Redis に保存する必要があります。

ログインすると、データが Redis に保存されていることがわかります。

ただし、ログイン リクエストによって返された内容を検査すると、次のことがわかります:

完全に異なるセッション ID。

最初の質問は次のとおりです:

これらの ID が一致しないのはなぜですか? Spring はどのキーを探すべきかをどのようにして知るのでしょうか?

もう 1 つの質問は、redis からデータを取得するためのフィルターは何ですか?フィルター チェーン内のすべてのフィルターをデバッグしようとします: リーリー

しかし、何らかの方法で httpserletrequest からセッション情報を読み取っているようです。ただし、redis からキーを削除すると、それを必要とするエンドポイントの認証が失敗します。

###私は何か見落としてますか? Fitler を開始する前に、Redis からセッション情報を取得して

httpservlerrequest

に保存しますか?あるいは、Redis データをどのように読み取るのでしょうか?

###ご協力いただきありがとうございます。

解決策

セッション Cookie の値は Base64 でエンコードされています:

リーリー リーリー

したがって、base64 デコードされると、Cookie のセッション ID は Redis に保存されているセッション ID と一致します。

まだ読んでいない場合は、このドキュメントをお勧めします:

https://www.php.cn/link/e27c71957d1e6c223e0d48a165da2ee1

特に「セッション管理のコンポーネントについて」セクション:

https://www.php.cn/link/e27c71957d1e6c223e0d48a165da2ee1# Understanding-session-management-components

使用している Spring Security のバージョンについては言及していませんが、Spring Security 6 を使用していると思います。このセクションには、セッション認証に関連する次のような文があります:

以上がspring-security フィルターは Redis からセッション情報を取得しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。