アクティブ ユーザーの UserDetails の取得
Spring アプリケーションでコントローラーを操作する場合、アクティブ ユーザーの詳細を取得するには、次のアクセスを実行します。 UserDetails の実装。
<code class="java">User activeUser = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();</code>
このアプローチは機能しますが、依存関係の注入を使用して簡素化できます。
@AuthenticationPrincipal アノテーションの使用
Spring Security 3.2以降では、@AuthenticationPrincipalアノテーションが利用できるようになった。このエレガントなソリューションにより、UserDetails オブジェクトをコントローラーまたはメソッドに直接挿入できます。
<code class="java">public ModelAndView someRequestHandler(@AuthenticationPrincipal User activeUser) { ... }</code>
ArgumentResolvers の使用
Spring Security 3.2 より前の場合、またはカスタマイズが必要な場合、引数リゾルバーを使用できます。 CurrentUserWebArgumentResolver のような WebArgumentResolver を作成すると、UserDetails オブジェクトを自動的に解決できます。
<code class="java">public class CurrentUserWebArgumentResolver implements WebArgumentResolver { @Override public Object resolveArgument(...) { if (...) { return (User) ((Authentication) principal).getPrincipal(); } else { return WebArgumentResolver.UNRESOLVED; } } }</code>
このリゾルバーはアプリケーションの設定に登録する必要があります。
Spring 3.1 : HandlerMethodArgumentResolver
Spring 3.1 では、CurrentUserHandlerMethodArgumentResolver のような HandlerMethodArgumentResolver が推奨されます。 WebArgumentResolver と同様の機能を提供します。
<code class="java">public class CurrentUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver { @Override public Object resolveArgument(...) { if (...) { return (User) ((Authentication) principal).getPrincipal(); } else { return WebArgumentResolver.UNRESOLVED; } } }</code>
このリゾルバーも構成に登録する必要があります。
これらのメソッドを利用することで、アクティブなユーザーの UserDetails をエレガントに取得できます。コントローラーを使用すると、Spring アプリケーションのコードの保守性と可読性が向上します。
以上がSpringアプリケーションでアクティブユーザーのUserDetailsを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。