User must be authenticated with Spring Security before authorization can be completed

在尝试使用Spring Security进行OAuth2授权时遇到一个问题,当调用/oauth/authorize接口且未登录时,系统不跳转登录页面而是直接报'User must be authenticated with Spring Security before authorization can be completed.'的错误。问题的根本原因在于一个全局异常处理器(@RestControllerAdvice)意外捕获了异常,阻止了正常流程。解决方案是注释掉这部分异常处理代码,确保异常能够被ExceptionTranslationFilter正确处理。如果遇到类似问题,可以通过在ExceptionTranslationFilter打断点来定位并解决。
摘要由CSDN通过智能技术生成

问题提示

User must be authenticated with Spring Security before authorization can be completed.

背景是什么样子?怎么发生的?

我们之前是自己公司内部开发前端,只要用spring security + oauth2 的密码模式就可以了,但是最近 因为一些商务问题,我们需要把其中几个模块给到 第三方开发(这里的第三方 还不是说 他现有系统需要接入我们,而是他们开发完,给我们,和我们系统属于同一个),
后台我们可以通过给他们demo 开发,直接整合我们的auth-client,但是前端他们也有开发任务,他们之后的页面要通过iframe 嵌入我们,
其实这个可以通过同一个域名 共享参数 也就没有问题了。
但是 他之后有一个需求 支持云端部署 和 私有部署,如果私有部署,导致跨域
所以必须使用 oauth2 中的授权码模式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I12WUOfM-1624147911987)(images/screenshot_1624146159261.png)]

怎么重现问题

调用/oauth/authorize 接口 的时候,如果没有登录 不跳登录页 直接报上面的错

原因:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4GpHSpUg-1624147911990)(images/screenshot_1624146594344.png)]
第五步 出现异常 我在 其catch 打断点 直接跳过了
猜 : 只能是 异常让我在之前拦截了,我去找

DefaultExceptionAdvice 类 异常通用处理  ,我看到还真有一个 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3xVgJJSw-1624147911992)(images/screenshot_1624146733877.png)]

我就试着把它 注释掉,再试一下 就好使了
说明 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0bFMjyh2-1624147911995)(images/screenshot_1624146877227.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LqkAdEbB-1624147911998)(images/screenshot_1624147086193.png)]

这种结构

为什么会出现这种情况呢?

按我们正常的理解,应该是 先往上抛,然后才到 异常统一拦截,这怎么反了
@ControllerAdvice 和 @RestControllerAdvice都是对Controller进行增强的,可以全局捕获spring mvc抛的异常。
@RestControllerAdvice 对异常进行了拦截

如果你遇到了这个问题 怎么定位?

先去ExceptionTranslationFilter 类的

在这里插入图片描述

打个断点,如果不能进入,那你可能是和我一样的问题

怎么解决?

DefaultExceptionAdvice 类上  @RestControllerAdvice  注解注释掉
之前是因为 springboot 脚手架的时候 加的,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孔明兴汉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值