Maison > Java > javaDidacticiel > le corps du texte

Comment récupérer les détails de l'utilisateur actif dans les contrôleurs Spring ?

DDD
Libérer: 2024-11-05 17:17:02
original
600 Les gens l'ont consulté

How to Retrieve Active User Details in Spring Controllers?

Obtention des détails de l'utilisateur actif

Dans les contrôleurs Spring, l'accès aux détails de l'utilisateur actif (connecté) implique généralement la récupération de l'implémentation UserDetails via SecurityContextHolder . Cependant, Spring propose une approche alternative pour simplifier ce processus.

Utilisation de @AuthenticationPrincipal

À partir de Spring Security 3.2, l'annotation @AuthenticationPrincipal fournit un moyen pratique de câbler automatiquement le UserDetails dans des contrôleurs ou des méthodes. En annotant un paramètre de méthode avec @AuthenticationPrincipal, Spring injecte automatiquement l'objet Principal, qui contient l'implémentation UserDetails.

Exemple :

<code class="java">public ModelAndView someRequestHandler(@AuthenticationPrincipal User activeUser) { ... }</code>
Copier après la connexion

Définition d'un Résolveur d'arguments personnalisé (pré-Spring 3.2)

Si vous utilisez une version antérieure de Spring Security ou si vous avez besoin de plus de contrôle, vous pouvez implémenter un WebArgumentResolver ou un HandlerMethodArgumentResolver personnalisé pour récupérer l'objet User du principal. .

Exemple (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>
Copier après la connexion

Printemps 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>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!