我刚刚迁移到 SpringBoot 3.0.0,但发现应用程序在抛出异常时无法正确处理 HttpStatus。它总是给出 403 FORBIDDEN(或为未经身份验证的请求配置的其他代码)。似乎在捕获异常或其他原因后身份验证就会丢失。
我在这里做了一个简约的例子:
https://gitlab.com/gobanit-public/stack-overflow/spring-boot-3-http-status-bug
有4个班级:
演示应用程序- 应用程序启动器
自定义验证过滤器- 自定义身份验证过滤器,将虚拟身份验证设置为 AuthManager。
网页配置- 网络安全配置。任何请求都需要身份验证。
测试控制器- 具有三个端点的基本控制器 - 一个用于成功,两个用于失败
调用成功端点时,您会收到响应。身份验证工作正常。当调用失败端点时,它会抛出 HttpResponseException 和 HttpStatus.BAD_REQUEST (400)。但是,我没有得到 400 响应,而是得到 403 响应。这似乎不对。当调用第二个失败端点时也会发生同样的情况,它不会抛出异常,而是直接写入错误响应。
是这个bug吗。或者我错过了什么?我在 3.0.0 发行说明中找不到与此相关的任何内容。它在 2.7.* 版本甚至 3.0.0-RC1 中运行良好,但在 3.0.0-RC2 和 3.0.0 中发生了变化。
Thanks!
我在没有 Spring Security 的情况下尝试过 - 它工作正常。
我尝试使用默认的基本身份验证,没有自定义身份验证过滤器 - 它也工作得很好。
所以我猜它与 Spring Security 过滤器有某种关系。
我尝试了不同版本的SpringBoot - 2.7.5(好的),3.0.0-RC1(好的),3.0.0-RC2(不好),3.0.0(不好)