>Java >java지도 시간 >Spring Controller에서 활성 사용자 세부 정보를 검색하는 방법은 무엇입니까?

Spring Controller에서 활성 사용자 세부 정보를 검색하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-05 17:17:02681검색

How to Retrieve Active User Details in Spring Controllers?

활성 사용자 UserDetails 얻기

Spring 컨트롤러에서 활성(로그인한) 사용자의 세부 정보에 액세스하려면 일반적으로 SecurityContextHolder를 통해 UserDetails 구현을 검색해야 합니다. . 그러나 Spring은 이 프로세스를 단순화하기 위한 대체 접근 방식을 제공합니다.

@AuthenticationPrincipal 사용

Spring Security 3.2부터 @AuthenticationPrincipal 주석은 UserDetails를 컨트롤러 또는 메소드에 추가합니다. @AuthenticationPrincipal로 메소드 매개변수에 주석을 추가함으로써 Spring은 UserDetails 구현을 포함하는 Principal 객체를 자동으로 주입합니다.

예:

<code class="java">public ModelAndView someRequestHandler(@AuthenticationPrincipal User activeUser) { ... }</code>

Custom Argument Resolver(Pre-Spring 3.2)

이전 버전의 Spring Security를 ​​사용 중이거나 더 많은 제어가 필요한 경우 사용자 정의 WebArgumentResolver 또는 HandlerMethodArgumentResolver를 구현하여 Principal에서 User 개체를 검색할 수 있습니다. .

예(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>

위 내용은 Spring Controller에서 활성 사용자 세부 정보를 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.