OAuth2.0实战!玩转认证、资源服务异常自定义这些骚操作!(三)

发布于 2022-7-11 11:42
浏览
0收藏

 

5、源码追踪

实践有了,总该理解一下为什么这么做吧?下面从源码的角度告诉你为什么要这么做?

我们知道获取令牌的接口为 /oauth/token,这个接口定义在TokenEndpoint#postAccessToken()(POST请求)方法中,如下图:

 OAuth2.0实战!玩转认证、资源服务异常自定义这些骚操作!(三)-开源基础软件社区
我们先不看其中的逻辑,平时我们写接口的异常怎么处理?

 

一般都是通过 @ExceptionHandler 特定的异常,然后统一的进行异常处理,是不是这样?

 

然后看一下上述的两种异常属于什么类型的,如下:

OAuth2.0实战!玩转认证、资源服务异常自定义这些骚操作!(三)-开源基础软件社区

 UnsupportedGrantTypeException

OAuth2.0实战!玩转认证、资源服务异常自定义这些骚操作!(三)-开源基础软件社区
 InvalidGrantException

是不是都继承了OAuth2Exception,那么尝试在TokenEndpoint这个类中找找有没有处理OAuth2Exception这个异常的处理器,果然找到了一个 handleException() 方法,如下:

 OAuth2.0实战!玩转认证、资源服务异常自定义这些骚操作!(三)-开源基础软件社区
可以看到,这里的异常翻译器已经使用了我们自定义的OAuthServerWebResponseExceptionTranslator。可以看下默认的异常翻译器是啥,代码如下:

 OAuth2.0实战!玩转认证、资源服务异常自定义这些骚操作!(三)-开源基础软件社区
看到没,就是这个DefaultWebResponseExceptionTranslator

 

问题又来了:为什么在配置文件中设置了OAuthServerWebResponseExceptionTranslator就会生效呢?

 

这个不得不看下 @EnableAuthorizationServer 这个注解了,源码如下:

 OAuth2.0实战!玩转认证、资源服务异常自定义这些骚操作!(三)-开源基础软件社区
注入了这个AuthorizationServerEndpointsConfiguration配置类,其中注入了AuthorizationEndpoint这个bean,如下:

 OAuth2.0实战!玩转认证、资源服务异常自定义这些骚操作!(三)-开源基础软件社区
将自定义的异常翻译器设置进入了AbstractEndpoint这个抽象类中,而TokenEndpoint正是继承了这个抽象类,复用了其中的异常翻译器,代码如下:

 OAuth2.0实战!玩转认证、资源服务异常自定义这些骚操作!(三)-开源基础软件社区
哦了,问题解决了,学东西一定要知其所以然...............

 

文章转自公众号:码猿技术专栏

标签
已于2022-7-11 11:42:11修改
收藏
回复
举报
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
    相关推荐