控制器返回401而不是400中的验证错误 [英] Validation error in controller returns 401 instead of 400
本文介绍了控制器返回401而不是400中的验证错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的REST控制器中有一个POST终结点,无需身份验证/授权即可访问。在WebSecurityConfigurerAdapter中配置如下:
@Override
public void configure(WebSecurity web) {
web.ignoring().antMatchers("/api/v1/user");
}
端点具有输入数据的验证(由注释javax.validation.Valid提供)。当我发送无效数据时,我收到401响应,而不是400。这个问题不存在于安全终端中,在那里发送默认的Spring Boot 400消息。
在调试期间,我发现在处理方法ArgumentNotValidException(在控制器中发生验证错误时抛出)的过程中,WebExpressionVoter被执行并返回值-1,这意味着‘拒绝访问’。如何将我的应用程序配置为忽略对公共终结点的安全检查?
我知道使用ControllerAdance进行异常处理是其中一个选项,但可以有默认的400条消息吗?
提前感谢您的任何提示!
编辑:
Security filter chain: [
WebAsyncManagerIntegrationFilter
SecurityContextPersistenceFilter
HeaderWriterFilter
LogoutFilter
OAuth2AuthenticationProcessingFilter
RequestCacheAwareFilter
SecurityContextHolderAwareRequestFilter
AnonymousAuthenticationFilter
SessionManagementFilter
ExceptionTranslationFilter
FilterSecurityInterceptor
]
推荐答案
好的,我找到解决方案了。我不知道为什么,但当发生异常时,会有另一个对url:/error的POST请求。当我将这个url添加到我的忽略列表中时,它开始起作用了。因此我的配置如下所示:
@Override
public void configure(WebSecurity web) {
web.ignoring().antMatchers("/api/v1/user", "/error/**")
}
@Ken Chan感谢您提供有关调试过滤器的信息!这是至关重要的。
这篇关于控制器返回401而不是400中的验证错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文