首頁 > Java > java教程 > 如何在 Spring 控制器中檢索活動使用者詳細資訊?

如何在 Spring 控制器中檢索活動使用者詳細資訊?

DDD
發布: 2024-11-05 17:17:02
原創
702 人瀏覽過

How to Retrieve Active User Details in Spring Controllers?

取得活動使用者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):

範例(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>
登入後複製
範例(WebArgumentResolver):Spring 3.1(HandlerMethodArgumentResolver):

以上是如何在 Spring 控制器中檢索活動使用者詳細資訊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板