Mar*_*cin 4 spring-security spring-boot spring-security-oauth2
我的休息控制器中有一个后端点,无需身份验证/授权即可访问。它在 WebSecurityConfigurerAdapter 中配置如下:
@Override
public void configure(WebSecurity web) {
web.ignoring().antMatchers("/api/v1/user");
}
Run Code Online (Sandbox Code Playgroud)
端点对输入数据进行验证(由注释 javax.validation.Valid 提供)。当我发送无效数据时,我收到 401 响应而不是 400。此问题在发送默认 Spring Boot 400 消息的安全端点中不存在。
在调试过程中,我发现在处理 MethodArgumentNotValidException(控制器中发生验证错误时抛出)期间,执行 WebExpressionVoter 并返回值 -1,这意味着“访问被拒绝”。如何配置我的应用程序以忽略公共端点的安全检查?
我知道使用 ControllerAdvice 进行异常处理是一种选择,但是是否可以有默认的 400 消息?
预先感谢您的任何提示!
编辑:
Security filter chain: [
WebAsyncManagerIntegrationFilter
SecurityContextPersistenceFilter
HeaderWriterFilter
LogoutFilter
OAuth2AuthenticationProcessingFilter
RequestCacheAwareFilter
SecurityContextHolderAwareRequestFilter
AnonymousAuthenticationFilter
SessionManagementFilter
ExceptionTranslationFilter
FilterSecurityInterceptor
]
Run Code Online (Sandbox Code Playgroud)
好的,我找到了解决方案。我不知道为什么,但是当发生异常时,有另一个POST请求到这个url:/error。当我将此网址添加到我的忽略列表中时,它就开始工作了。所以我的配置如下所示:
@Override
public void configure(WebSecurity web) {
web.ignoring().antMatchers("/api/v1/user", "/error/**")
}
Run Code Online (Sandbox Code Playgroud)
@Ken Chan 感谢您提供有关调试过滤器的信息!这是至关重要的。
| 归档时间: |
|
| 查看次数: |
1679 次 |
| 最近记录: |