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

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

DDD
DDDoriginal
2024-11-05 17:17:02601parcourir

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>

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>

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>

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!

Déclaration:
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