取得活動使用者UserDetails
在Spring 控制器中,存取活動(登入)使用者的詳細資訊通常涉及透過SecurityContextHolder 擷取UserDetails 實現。但是,Spring 提供了一種替代方法來簡化此過程。
使用 @AuthenticationPrincipal
從 Spring Security 3.2 開始,@AuthenticationPrincipal 註解提供了一種便捷的方法來自動組裝到UserDetails 到控制器或方法中。透過使用@AuthenticationPrincipal註釋方法參數,Spring會自動注入Principal對象,其中包含UserDetails實作。
範例:
<code class="java">public ModelAndView someRequestHandler(@AuthenticationPrincipal User activeUser) { ... }</code>
定義一個自訂參數解析器(Spring 3.2 之前)
如果您使用🎜>如果您使用的是早期版本的Spring Security 或需要更多控制,您可以實現自訂WebArgumentResolver 或HandlerMethodArgumentResolver 來從主體檢索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>
範例(WebArgumentResolver):
<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 控制器中檢索活動使用者詳細資訊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!