Spring security Spring安全性-身份验证期间记录异常

Spring security Spring安全性-身份验证期间记录异常,spring-security,Spring Security,在开发过程中,我们希望记录所有发生的异常并保持默认行为。不幸的是,在进行身份验证时,似乎不可能记录发生的异常 我们已经尝试通过扩展SimpleRuthenticationFailureHandler来修饰默认身份验证失败处理。但我们最终陷入了一个丑陋的重定向循环,因为在设置failureHandler时,“login?error”页面的过滤器会被停用(因为failureUrl将被设置为null) 因此,我们希望实现以下目标: @Slf4j private static class Logging

在开发过程中,我们希望记录所有发生的异常并保持默认行为。不幸的是,在进行身份验证时,似乎不可能记录发生的异常

我们已经尝试通过扩展
SimpleRuthenticationFailureHandler
来修饰默认身份验证失败处理。但我们最终陷入了一个丑陋的重定向循环,因为在设置failureHandler时,“login?error”页面的过滤器会被停用(因为failureUrl将被设置为null)

因此,我们希望实现以下目标:

@Slf4j
private static class LoggingUrlFailureHandler extends SimpleUrlAuthenticationFailureHandler {
    @Override
    public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {
        log.error("Error while authenticating.", exception);
        super.onAuthenticationFailure(request, response, exception);
    }
}
我们希望实现这样的目标:

@Slf4j
private static class LoggingUrlFailureHandler extends SimpleUrlAuthenticationFailureHandler {
    @Override
    public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {
        log.error("Error while authenticating.", exception);
        super.onAuthenticationFailure(request, response, exception);
    }
}
然后将该类用作
websecurityconfiguredapter
中的
FailureHandler

.and()
    .saml2Login(saml2 -> {
        saml2.failureHandler(new LoggingUrlFailureHandler());
    });
但在设置FailureHandler时,failureUrl将设置为null,在设置failureUrl时,将设置默认值(
SimpleRuthenticationFailureHandler
)。当未设置failureUrl时,用于呈现默认错误页面的筛选器将不会处于活动状态。因此,保持违约行为是不可能的


这发生在
org.springframework.security.config.annotation.web.configurers.AbstractAuthenticationFilterConfigure

中,这是不可能回答的,因为我们不知道您的代码是什么样子,您使用的是什么身份验证类型,是否是自定义的等等。嘿,谢谢您的回答。我正在使用saml2登录(和SpringSecurity5.4.6)。通常可以在
websecurityConfigureAdapter
中为内置身份验证类型设置failureHandler&FailureUrl。我很清楚spring安全性是如何工作的,但如果没有看到您当前的任何实现,这是不可能回答的。请在您的问题上投入一些精力,并生成一个运行示例,其中包含您尝试过的内容,并描述发生的情况、预期的行为以及它无法工作的原因,以及错误日志和调试日志。您好@Toerktumlare,再次感谢您检查我的上一条评论:)我现在添加了更多信息。