アクティブ ユーザー UserDetails の取得
Spring コントローラーでアクティブ (ログイン) ユーザーの詳細にアクセスするには、通常、SecurityContextHolder を介して UserDetails 実装を取得する必要があります。 。ただし、Spring は、このプロセスを簡素化するための代替アプローチを提供します。
@AuthenticationPrincipal の使用
Spring Security 3.2 以降、@AuthenticationPrincipal アノテーションは、 UserDetails をコントローラーまたはメソッドに組み込みます。メソッドパラメータに @AuthenticationPrincipal アノテーションを付けることにより、Spring は UserDetails 実装を含む Principal オブジェクトを自動的に挿入します。
例:
<code class="java">public ModelAndView someRequestHandler(@AuthenticationPrincipal User activeUser) { ... }</code>
カスタム引数リゾルバー (Spring 3.2 より前)
Spring Security の以前のバージョンを使用している場合、またはより詳細な制御が必要な場合は、カスタム WebArgumentResolver または HandlerMethodArgumentResolver を実装して、プリンシパルから User オブジェクトを取得できます。 .
例 (WebArgumentResolver):
<code class="java">public class CurrentUserWebArgumentResolver implements WebArgumentResolver { @Override public Object resolveArgument(MethodParameter methodParameter, NativeWebRequest webRequest) { if (methodParameter.isParameterType(User.class) && methodParameter.hasParameterAnnotation(ActiveUser.class)) { Principal principal = webRequest.getUserPrincipal(); return (User) ((Authentication) principal).getPrincipal(); } else { return WebArgumentResolver.UNRESOLVED; } } }</code>
Spring 3.1 (HandlerMethodArgumentResolver):
<code class="java">public class CurrentUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver { @Override public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { if (this.supportsParameter(methodParameter)) { Principal principal = webRequest.getUserPrincipal(); return (User) ((Authentication) principal).getPrincipal(); } else { return WebArgumentResolver.UNRESOLVED; } } }</code>
以上がSpringコントローラーでアクティブなユーザーの詳細を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。