【问题标题】:SecurityContextHolder.getContext().getAuthentication() always return 'anonymousUser'SecurityContextHolder.getContext().getAuthentication() 总是返回“anonymousUser”
【发布时间】:2018-11-15 12:59:32
【问题描述】:

我使用以下配置创建了 Spring Boot 应用程序:

  • Spring Boot 2.1.0.RELEASE
  • OpenJdk 11

我的项目中有一个 AuditConfiguration 类,如下所示:

@Configuration
@EnableJpaAuditing(auditorAwareRef = "auditorProvider")
public class AuditConfiguration {

    @Bean
    public AuditorAware<String> auditorProvider() {
        return new AuditorAwareImpl();
    }

    class AuditorAwareImpl implements AuditorAware<String> {
        @Override
        public Optional<String> getCurrentAuditor() {
            Principal principal = 
            SecurityContextHolder.getContext().getAuthentication();
            return Optional.of(principal.getName());
        }
    }
}

SecurityContextHolder.getContext().getAuthentication() 总是返回anonymousUser

但是,以下代码返回正确的用户名。

@RestController
@RequestMapping("/history")
public class HistoryEndpoint {

    @RequestMapping(value = "/username", method = RequestMethod.GET)
    @ResponseBody
    public String currentUserName(Principal principal) {
        return principal.getName();
    }
}

我需要您的帮助来解决这个问题。

【问题讨论】:

  • 尝试自动装配主体对象,而不是直接从安全上下文持有者那里获取它并检查问题是否消失。
  • 您是否将 Authentication 对象设置为 spring 安全上下文?
  • 请出示您的配置文件

标签: spring spring-boot spring-security


【解决方案1】:

我使用以下课程获得了经过身份验证的用户。我遇到了 JPA 审计的问题。 @CreatedBy 始终保存 null。然后我尝试使用此方法获取经过身份验证的用户SecurityContextHolder.getContext().getAuthentication()。该方法返回annonymousUser。但是我的问题已经解决了。

@ManagedBean
@EnableJpaAuditing
public class SpringSecurityAuditorAware implements AuditorAware<String> {

private final HttpServletRequest httpServletRequest;

public SpringSecurityAuditorAware(HttpServletRequest httpServletRequest) {
    this.httpServletRequest = httpServletRequest;
}

@Override
public Optional<String> getCurrentAuditor() {
    return Optional.ofNullable(httpServletRequest.getUserPrincipal())
            .map(Principal::getName);
}
}

【讨论】:

    猜你喜欢
    • 2014-04-07
    • 2013-07-08
    • 2017-04-25
    • 2015-08-17
    • 2019-04-28
    • 1970-01-01
    • 2019-06-29
    • 2017-11-22
    相关资源
    最近更新 更多