控制器返回401而不是400中的验证错误 [英] Validation error in controller returns 401 instead of 400

查看:39
本文介绍了控制器返回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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆