Spring boot JWT Auth 详细信息为空

Posted

技术标签:

【中文标题】Spring boot JWT Auth 详细信息为空【英文标题】:Spring boot JWT Auth details are null 【发布时间】:2020-05-09 21:34:48 【问题描述】:

我使用 Jhipster 创建了 Spring Boot 应用程序。我想创建将捕获失败的身份验证的侦听器。

@Component
public class AuthenticationFailureListener
implements ApplicationListener<AuthenticationFailureBadCredentialsEvent> 

@Autowired
private LoginAttemptService loginAttemptService;

public void onApplicationEvent(AuthenticationFailureBadCredentialsEvent e) 
    WebAuthenticationDetails auth = (WebAuthenticationDetails) e.getAuthentication().getDetails();
    if(auth!=null) 
        loginAttemptService.loginFailed(auth.getRemoteAddress());
    


我正在使用 JWT。当我调试此方法时,我可以看到电子邮件和密码,但详细信息为空。所以 auth 对象是空的,所以我看不到哪个 IP 用户试图登录。为了在此处获取详细信息,我应该进行哪些更改?

【问题讨论】:

【参考方案1】:

我使用了类似的方法,但注入了 HttpRequest

@Component
public class AuthenticationFailureEventListener implements ApplicationListener<AuthenticationFailureBadCredentialsEvent> 
    private final Logger log = LoggerFactory.getLogger(AuthenticationFailureEventListener.class);
    private final HttpServletRequest request;

    private final LoginAttemptService loginAttemptService;

    public AuthenticationFailureEventListener(HttpServletRequest request, LoginAttemptService loginAttemptService) 
        this.request = request;
        this.loginAttemptService = loginAttemptService;
    

    @Override
    public void onApplicationEvent(final AuthenticationFailureBadCredentialsEvent e) 
        log.debug("Failed login try from ", request.getRemoteAddr());
        final String xfHeader = request.getHeader("X-Forwarded-For");
        if (xfHeader == null) 
            loginAttemptService.loginFailed(request.getRemoteAddr());
         else 
            loginAttemptService.loginFailed(xfHeader.split(",")[0]);
        
    


这真的很好用。

【讨论】:

以上是关于Spring boot JWT Auth 详细信息为空的主要内容,如果未能解决你的问题,请参考以下文章

带有 JWT auth 和 csrf 令牌的 Spring Boot STATELESS 应用程序

在我的 Spring Boot 应用程序中实现 jwt auth 后,Ive cors 问题再次出现

创建隐式JWT时的Spring Boot OAuth2?

Spring Boot JWT token 基于角色的授权问题

Spring Boot + JWT + Kotlin:登录 URL 403

spring boot - 基本的 Active Directory 身份验证,然后是 JWT 令牌