問題ステートメント
現在ログインしているユーザーの UserDetails にアクセスするにはSpring MVC アプリケーションのコントローラー内に実装する場合、開発者は通常、Principal オブジェクトを取得して目的の型にキャストするソリューションを利用します。このアプローチは機能しますが、コントローラー内に不必要な複雑さと混乱が生じます。
@AuthenticationPrincipal を使用したエレガントなソリューション
幸いなことに、Spring Security は、このシナリオに対してより合理化されたソリューションを提供します。注釈の使用を通じて。 Spring Security 3.2 以降のバージョンの場合、開発者はコントローラー内で @AuthenticationPrincipal アノテーションを使用して UserDetails 実装を取得できます。
@AuthenticationPrincipal を使用した実装
これを利用するには注釈を使用して、コントローラー メソッドを次のように変更できます。
<code class="java">public ModelAndView someRequestHandler(@AuthenticationPrincipal User activeUser) { // ... }</code>
HandlerMethodArgumentResolver を使用した代替ソリューション
Spring 3.1 以前を使用している場合、またはさらに多くの機能が必要な場合柔軟性に優れているため、カスタム WebArgumentResolver または HandlerMethodArgumentResolver を実装して、この機能を実現できます。
WebArgumentResolver アプローチ
WebArgumentResolver の場合、次のインターフェイスを実装するクラスを作成できます。
<code class="java">public class CurrentUserWebArgumentResolver implements WebArgumentResolver{ // Implement the resolveArgument method as detailed in the answer }</code>
HandlerMethodArgumentResolver アプローチ
HandlerMethodArgumentResolver の場合、次のインターフェイスを実装するクラスを作成できます。
<code class="java">public class CurrentUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver { // Implement the supportsParameter and resolveArgument methods as detailed in the answer }</code>
カスタム引数リゾルバー
カスタム引数リゾルバーを実装した後、Spring 構成ファイル内でそれを構成する必要があります:
<code class="xml"><bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" id="applicationConversionService"> <property name="customArgumentResolver"> <bean class="CurrentUserWebArgumentResolver"/> </property> </bean></code>
Spring Security 3.2 以降のソリューション
Spring Security 3.2 以降の場合、@AuthenticationPrincipal アノテーションと AuthenticationPrincipalArgumentResolver という組み込みソリューションが存在します。注釈と引数リゾルバーを構成に追加するだけです:
<code class="xml"><mvc:annotation-driven> <mvc:argument-resolvers> <bean class="org.springframework.security.web.bind.support.AuthenticationPrincipalArgumentResolver"/> </mvc:argument-resolvers> </mvc:annotation-driven></code>
以上がSpring MVC でアクティブなユーザーの詳細に簡単にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。