활성 사용자 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!