Spring Security getprincipal()方法返回字符串(用户名)代替类UserDetails

时间:2019-04-04 06:48:15

标签: linux spring-boot jwt war spring-security-oauth2

我们正在使用带有JWT令牌的Spring-boot 2.0.5

SecurityContextHolder.getContext().getAuthentication().getPrincipal()返回String (Username)代替CustomUserDetails对象,该对象仅在WAR文件中的UserDetails类中实现。

在大多数情况下,此问题仅在代码运行正常的情况下重复出现

以下是我们使用的唯一自定义过滤器,它在FilterSecurityInterceptor过滤器之后调用

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
        throws IOException, ServletException {
    CustomHttpServletRequestWrapper request = new CustomHttpServletRequestWrapper((HttpServletRequest) req);
    if(request!=null && request.getHeader("Authorization")!=null && request.getHeader("Authorization").length()>7) {

        CustomUserDetails user = (CustomUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
}
}

应该返回用户详细信息对象

2 个答案:

答案 0 :(得分:0)

信息不足,无法为您提供任何答案,很高兴知道:

  • SecurityContextHolder.getContext().getAuthentication()返回了什么实例?
  • 您拥有什么安全过滤器列表,您的自定义过滤器在哪里?
  • 什么时候发生?您必须知道重现步骤

答案 1 :(得分:0)

在我们的例子中,有两个同名的Bean引起了问题