首页 > Java > java教程 > 正文

如何在 Spring 应用程序中检索活动用户的用户详细信息?

Patricia Arquette
发布: 2024-11-05 04:37:02
原创
547 人浏览过

How to Retrieve the Active User's UserDetails in a Spring Application?

检索活动用户的用户详细信息

在 Spring 应用程序中使用控制器时,可以通过访问来检索活动用户的详细信息UserDetails 实现。

<code class="java">User activeUser = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();</code>
登录后复制

虽然此方法有效,但可以使用依赖注入进行简化。

使用 @AuthenticationPrincipal 注解

中Spring Security 3.2及更高版本,可以使用@AuthenticationPrincipal注释。这个优雅的解决方案可以将 UserDetails 对象直接注入到控制器或方法中。

<code class="java">public ModelAndView someRequestHandler(@AuthenticationPrincipal User activeUser) {
    ...
}</code>
登录后复制

使用 ArgumentResolvers

Spring Security 3.2 之前,或者如果需要自定义,可以使用参数解析器。可以创建 WebArgumentResolver,如 CurrentUserWebArgumentResolver 来自动解析 UserDetails 对象。

<code class="java">public class CurrentUserWebArgumentResolver implements WebArgumentResolver {
    @Override
    public Object resolveArgument(...) {
        if (...) {
            return (User) ((Authentication) principal).getPrincipal();
        } else {
            return WebArgumentResolver.UNRESOLVED;
        }
    }
}</code>
登录后复制

此解析器需要在应用程序的配置中注册。

Spring 3.1 : HandlerMethodArgumentResolver

在 Spring 3.1 中,推荐使用 HandlerMethodArgumentResolver,如 CurrentUserHandlerMethodArgumentResolver。它提供了与 WebArgumentResolver 类似的功能。

<code class="java">public class CurrentUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
    @Override
    public Object resolveArgument(...) {
        if (...) {
            return (User) ((Authentication) principal).getPrincipal();
        } else {
            return WebArgumentResolver.UNRESOLVED;
        }
    }
}</code>
登录后复制

这个解析器也需要在配置中注册。

通过利用这些方法,你可以优雅地获取活跃用户的 UserDetails您的控制器,增强 Spring 应用程序代码的可维护性和可读性。

以上是如何在 Spring 应用程序中检索活动用户的用户详细信息?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板