SpringアプリケーションでアクティブユーザーのUserDetailsを取得するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-05 04:37:02
オリジナル
490 人が閲覧しました

How to Retrieve the Active User's UserDetails in a Spring Application?

アクティブ ユーザーの 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!