Spring Security がユーザーを認証するときに、セッション内のカスタム ユーザー オブジェクトを管理するにはどうすればよいでしょうか? 質問する

Spring Security がユーザーを認証するときに、セッション内のカスタム ユーザー オブジェクトを管理するにはどうすればよいでしょうか? 質問する

いつスプリングセキュリティユーザーを認証すると、UserDetail オブジェクトが作成され、Web アプリで現在の UserId を検索できるようになります。ただし、UserDetails とともに設定やその他の詳細を含むカスタム ユーザー オブジェクトを保持したり、UserDetails を置き換えたりしたいとします。

では、Spring Security が正常に認証されたときにカスタム ユーザー オブジェクトをセッションに追加するにはどうすればよいでしょうか。また、Spring Security がログインしたユーザーをログアウトするときに、セッションからカスタム ユーザー オブジェクトを削除するにはどうすればよいでしょうか。

それとも、これを行う適切な方法はあるのでしょうか?

ベストアンサー1

IMO では、これを行う最善の方法は、サービスの 1 つ (おそらく UserService) に UserDetailsS​​ervice を実装させ、独自のユーザー詳細サービスを使用することを Spring Security XML で指定することです。

UserDetailsS​​ervice で必要なのは、loadByUsername(String username) メソッドを実装することです。このメソッドは、UserDetails を実装するクラスを返す必要があります。これは、好きなものを格納する独自のカスタム オブジェクトにすることができます。これの利点は、Spring Security タグライブラリを介して JSP からオブジェクトのプロパティにアクセスできることと、Spring Security の SecurityContextHolder シングルトン (スレッド セーフ) からも常に利用できることです。

これに関するドキュメントへのリンクは次のとおりです:スプリングセキュリティマニュアル、第8章パスワード暗号化のためのカスタム ユーザー詳細サービスの実装について説明したブログ投稿を次に示します。使用例

お役に立てれば

編集: ログアウト時にオブジェクトがセキュリティ コンテキストとセッションから削除されることを忘れていました。これが最も便利な点です。Spring Security によって完全に管理されます。

おすすめ記事