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

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

我们使用带有 JWT token 的 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();
}
}

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

最佳答案

信息不足,无法为您提供任何答案,最好知道:

  • 什么实例从 SecurityContextHolder.getContext().getAuthentication() 返回?
  • 您拥有的安全过滤器列表是什么?您的自定义过滤器位于何处?
  • 这是什么时候发生的?你必须知道重现它的步骤

关于linux - Spring Security getprincipal() 方法返回字符串(用户名)代替类 UserDetails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55509468/

相关文章:

java - 即使设置正确,Gradle 也会发现错误的 JAVA_HOME

linux - gprof 显示一个简单的信号处理程序占用大量 CPU

linux - 选择案例无法按预期工作

java - Jpa 存储库查询 - java.lang.Object;不能转换到模型

java - JdbcTemplate 不适用于 Spring Boot 项目

c# - 使用 JWT token 的 ASP.NET Core 网站到 WebApi 身份验证

linux - aplay/alsaplayer - 声音不适用于普通用户

spring-boot - Consul 键值对用于 Spring-boot 中的配置

graphql - 如何在 .NET Core 6 中实现微服务的 GraphQL 模式拼接和身份验证

javascript - 在 PassportJS 中生成自定义错误