문제 설명
현재 로그인한 사용자의 UserDetails에 액세스하려면 Spring MVC 애플리케이션의 컨트롤러 내에서 구현을 수행할 때 개발자는 일반적으로 Principal 객체를 검색하고 이를 원하는 유형으로 캐스팅하는 솔루션을 사용합니다. 이 접근 방식은 기능적이지만 컨트롤러 내에서 불필요한 복잡성과 혼란을 초래합니다.
@AuthenticationPrincipal을 사용한 우아한 솔루션
다행히도 Spring Security는 이 시나리오에 대해 보다 효율적인 솔루션을 제공합니다. 주석을 사용하여. Spring Security 3.2 이상 버전의 경우 개발자는 컨트롤러 내에서 @AuthenticationPrincipal 주석을 사용하여 UserDetails 구현을 검색할 수 있습니다.
@AuthenticationPrincipal을 사용한 구현
이를 활용하려면 주석을 추가하려면 다음과 같이 컨트롤러 메서드를 수정할 수 있습니다.
<code class="java">public ModelAndView someRequestHandler(@AuthenticationPrincipal User activeUser) { // ... }</code>
HandlerMethodArgumentResolver를 사용하는 대체 솔루션
Spring 3.1 이하를 사용하거나 더 필요한 경우 유연성이 있으므로 사용자 정의 WebArgumentResolver 또는 HandlerMethodArgumentResolver를 구현하여 이 기능을 구현할 수 있습니다.
WebArgumentResolver 접근 방식
WebArgumentResolver의 경우 다음 인터페이스를 구현하는 클래스를 생성할 수 있습니다.
<code class="java">public class CurrentUserWebArgumentResolver implements WebArgumentResolver{ // Implement the resolveArgument method as detailed in the answer }</code>
HandlerMethodArgumentResolver 접근 방식
HandlerMethodArgumentResolver의 경우 다음 인터페이스를 구현하는 클래스를 생성할 수 있습니다.
<code class="java">public class CurrentUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver { // Implement the supportsParameter and resolveArgument methods as detailed in the answer }</code>
구성 사용자 정의 인수 분석기
사용자 정의 인수 분석기를 구현한 후 Spring 구성 파일 내에서 이를 구성해야 합니다:
<code class="xml"><bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" id="applicationConversionService"> <property name="customArgumentResolver"> <bean class="CurrentUserWebArgumentResolver"/> </property> </bean></code>
Spring Security 3.2 이상 솔루션
Spring Security 3.2 이상에는 @AuthenticationPrincipal 주석과 AuthenticationPrincipalArgumentResolver라는 내장 솔루션이 있습니다. 구성에 주석과 인수 해석기를 추가하기만 하면 됩니다.
<code class="xml"><mvc:annotation-driven> <mvc:argument-resolvers> <bean class="org.springframework.security.web.bind.support.AuthenticationPrincipalArgumentResolver"/> </mvc:argument-resolvers> </mvc:annotation-driven></code>
위 내용은 Spring MVC에서 활성 사용자 세부 정보에 쉽게 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!