首页 > Java > java教程 > 正文

如何在 Spring 控制器中检索活动用户详细信息?

DDD
发布: 2024-11-05 17:17:02
原创
600 人浏览过

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>
登录后复制

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 控制器中检索活动用户详细信息?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!