问题提示
User must be authenticated with Spring Security before authorization can be completed.
背景是什么样子?怎么发生的?
我们之前是自己公司内部开发前端,只要用spring security + oauth2 的密码模式就可以了,但是最近 因为一些商务问题,我们需要把其中几个模块给到 第三方开发(这里的第三方 还不是说 他现有系统需要接入我们,而是他们开发完,给我们,和我们系统属于同一个),
后台我们可以通过给他们demo 开发,直接整合我们的auth-client,但是前端他们也有开发任务,他们之后的页面要通过iframe 嵌入我们,
其实这个可以通过同一个域名 共享参数 也就没有问题了。
但是 他之后有一个需求 支持云端部署 和 私有部署,如果私有部署,导致跨域
所以必须使用 oauth2 中的授权码模式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
怎么重现问题
调用/oauth/authorize 接口 的时候,如果没有登录 不跳登录页 直接报上面的错
原因:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4GpHSpUg-1624147911990)(images/screenshot_1624146594344.png)]
第五步 出现异常 我在 其catch 打断点 直接跳过了
猜 : 只能是 异常让我在之前拦截了,我去找
DefaultExceptionAdvice 类 异常通用处理 ,我看到还真有一个
我就试着把它 注释掉,再试一下 就好使了
说明
这种结构
为什么会出现这种情况呢?
按我们正常的理解,应该是 先往上抛,然后才到 异常统一拦截,这怎么反了
@ControllerAdvice 和 @RestControllerAdvice都是对Controller进行增强的,可以全局捕获spring mvc抛的异常。
@RestControllerAdvice 对异常进行了拦截
如果你遇到了这个问题 怎么定位?
先去ExceptionTranslationFilter 类的
打个断点,如果不能进入,那你可能是和我一样的问题
怎么解决?
DefaultExceptionAdvice 类上 @RestControllerAdvice 注解注释掉
之前是因为 springboot 脚手架的时候 加的,