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 に保存されていることがわかります。
ただし、ログイン リクエストによって返された内容を検査すると、次のことがわかります:
完全に異なるセッション ID。
最初の質問は次のとおりです:
これらの ID が一致しないのはなぜですか? Spring はどのキーを探すべきかをどのようにして知るのでしょうか?
もう 1 つの質問は、redis からデータを取得するためのフィルターは何ですか?フィルター チェーン内のすべてのフィルターをデバッグしようとします: リーリー
しかし、何らかの方法で httpserletrequest からセッション情報を読み取っているようです。ただし、redis からキーを削除すると、それを必要とするエンドポイントの認証が失敗します。###私は何か見落としてますか? Fitler を開始する前に、Redis からセッション情報を取得して
httpservlerrequestに保存しますか?あるいは、Redis データをどのように読み取るのでしょうか?
###ご協力いただきありがとうございます。解決策
リーリー リーリー
したがって、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 サイトの他の関連記事を参照してください。