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!