首页  >  文章  >  Java  >  如何在 Spring MVC 中轻松访问活跃用户详细信息?

如何在 Spring MVC 中轻松访问活跃用户详细信息?

Barbara Streisand
Barbara Streisand原创
2024-11-04 19:13:01591浏览

How to Easily Access Active User Details in Spring MVC?

如何在 Spring MVC 中获取活跃用户的 UserDetails

问题陈述

访问当前登录用户的 UserDetails在 Spring MVC 应用程序的控制器中实现时,开发人员通常会采用一种解决方案,其中涉及检索主体对象并将其转换为所需的类型。虽然这种方法有效,但它在控制器中引入了不必要的复杂性和混乱。

使用 @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 配置中对其进行配置file:

<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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn