当Web会话过期时,Spring Security会返回403 HTTP状态。理想情况下,它会以401响应。未授权和禁止是不同的。如果有一个有效的会话,对安全资源的请求应该只返回403,但用户只是没有对所述资源的权限。如果资源是安全的,并且没有经过身份验证的会话,那么Spring Security应该返回401。
我的应用程序需要非常具体地区分这两个错误代码。
我的问题是,如何自定义此行为?关于401和403之间的区别,请阅读本文。
当Web会话过期时,Spring Security会返回403 HTTP状态。理想情况下,它会以401响应。未授权和禁止是不同的。如果有一个有效的会话,对安全资源的请求应该只返回403,但用户只是没有对所述资源的权限。如果资源是安全的,并且没有经过身份验证的会话,那么Spring Security应该返回401。
我的应用程序需要非常具体地区分这两个错误代码。
我的问题是,如何自定义此行为?关于401和403之间的区别,请阅读本文。
3条答案
按热度按时间bfrts1fy1#
以下是我的解决方案:
nkcskrwz2#
在Sping Boot 2.2.1中,我使用了从AuthenticationEntryPoint派生的类:
在您的安全配置中(我有可以通过OAuth2.0令牌访问的ResourceServer)
sycxhyv73#
我也遇到了同样的问题,并找到了解决办法。在扩展
OncePerRequestFilter
的自定义过滤器中,我最初使用的代码如下:然后会被过滤掉,而服务器会发送一个403。但是,一旦我将代码切换到下面的代码,我就得到了正确的401错误。不知道为什么会这样。
希望有帮助!