Heim >Java >javaLernprogramm >Wie rufe ich aktive Benutzerdetails in Spring Controllern ab?

Wie rufe ich aktive Benutzerdetails in Spring Controllern ab?

DDD
DDDOriginal
2024-11-05 17:17:02681Durchsuche

How to Retrieve Active User Details in Spring Controllers?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn