java - 不能使用 AuthenticationException 的子类

标签 java jakarta-ee exception spring-security

我正在尝试创建一个 AuthenticationException 的异常子类,如下所示:

public class RegistrationNotCompleteException extends AuthenticationException {
    public RegistrationNotCompleteException(String msg) {
        super(msg);
    }
}

在我的 UserDetailsS​​ervice 类的 loadUserByUsername 中,我进行了以下检查:

if (!user.getHasRegistered()) {
    System.out.println("######## User: " + username
        + " has not completed the registration");
    throw new RegistrationNotCompleteException(
        "User has not completed registration");
}

因此用户会按预期被转发到 AuthenticationFailureHandler 类。

但是在onAuthenticationFailure方法中尝试获取异常类时如下:

public void onAuthenticationFailure(HttpServletRequest request,
    HttpServletResponse response, AuthenticationException exception)
    throws IOException, ServletException {

    UsernamePasswordAuthenticationToken token =
        (UsernamePasswordAuthenticationToken) exception.getAuthentication();
    String username = token.getName();
    String credentials = token.getCredentials().toString();
    System.out.println("Exception class: " + exception.getClass());

它打印异常类是 AuthenticationException 而不是 RegistrationNotCompleteException

我想验证异常类是RegistrationNotCompleteException

请告知如何做到这一点。

最佳答案

通过将检查更改为 exception.getCause().getClass() 而不是 exception.getClass() 来解决

关于java - 不能使用 AuthenticationException 的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12763324/

相关文章:

jakarta-ee - 使用 Spring MVC 时如何在 WEB-INF 之外访问/公开

c# - 如何在 C# (.NET 2.0) 中获取给定 TableAdapter 和 SqlDataAdapter 的 Sql 命令对象

c++ - 究竟什么时候捕获到异常?

java - 子窗口关闭后 UI 卡住,直到第一次单击

java - 为什么 Java 不允许子类不能访问其父类(super class)的任何构造函数?

java - 将文件从 applet 上传到 servlet 时出现问题

java - 如何获取所有java核心类的列表?

java - JLS 是否需要内联最终字符串常量?

jakarta-ee - SecurityContext不适用于@RolesAllowed

java - 是什么导致了 java.lang.ArrayIndexOutOfBoundsException 以及如何防止它?