Erhalten der Benutzerdetails des aktiven Benutzers
In Spring-Controllern umfasst der Zugriff auf die Details des aktiven (angemeldeten) Benutzers normalerweise das Abrufen der UserDetails-Implementierung über den SecurityContextHolder . Spring bietet jedoch einen alternativen Ansatz, um diesen Prozess zu vereinfachen.
Verwendung von @AuthenticationPrincipal
Ab Spring Security 3.2 bietet die Annotation @AuthenticationPrincipal eine bequeme Möglichkeit, das automatisch zu verdrahten UserDetails in Controller oder Methoden umwandeln. Durch Annotieren eines Methodenparameters mit @AuthenticationPrincipal fügt Spring automatisch das Principal-Objekt ein, das die UserDetails-Implementierung enthält.
Beispiel:
<code class="java">public ModelAndView someRequestHandler(@AuthenticationPrincipal User activeUser) { ... }</code>
Definieren eines Benutzerdefinierter Argument-Resolver (vor Spring 3.2)
Wenn Sie eine frühere Version von Spring Security verwenden oder mehr Kontrolle benötigen, können Sie einen benutzerdefinierten WebArgumentResolver oder HandlerMethodArgumentResolver implementieren, um das Benutzerobjekt vom Principal abzurufen .
Beispiel (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>
Spring 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>
Das obige ist der detaillierte Inhalt vonWie rufe ich aktive Benutzerdetails in Spring Controllern ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!