1.前言

这一个月以来学习SpringSecurity框架,如果不去读它的源码很难根据现实场景去实现想要的功能
这篇文章记录SpringCloudOauth整个发送令牌/校验令牌的过程,以防以后忘记

2.发布令牌

2.1看得懂的步骤

①校验clientId和clientSecret是否正确
②到/oauth/token的Controller层(这里我就叫他Controller层,实际上可能不是)
③Controller层会根据grant_type选择一个授权器。
④授权器会生成一个Oauth2Authentication类,调用一个tokenService
⑤tokenService主要作用,生成令牌/存储令牌/校验/刷新

2.2流程

ClientCredentialsTokenEndpointFilter -> TokenEndPoint -> XxxGranter -> DefaultTokenServices
校验客户端(client_id,clientSecret) 选择Granter 调用tokenService 生成令牌

3.校验令牌

3.1看得懂的步骤

①前端带着accessToken过来
②通过过滤器从头字段中解析 accessToken
③对accessToken进行校验

3.2流程

Oauth2ProcessingFilter -> Oauth2AuthenticationManager -> DefaultTokenServices
获取accessToken 调用tokenService校验accessToken 执行校验

4.读源码心得

在对SpringCloudOauth2的源码中,发现好多类都是 extends一个抽象类。
于是就有这么个问题:Java中 接口/抽象类/类的作用
接口:定义一组行为
抽象类:定义了共有的属性,共有的某些行为的具体做法
类:定义了一套精确的行为和属性

生理行为: 呼吸/睡觉/流汗/ 这就是个接口

人:就是一个抽象类 实现生理行为这套接口 。
其中 睡觉行为的步骤:
①躺下
②闭眼
③选择一个合适的卧姿 (这里可能要根据具体某类人自己决定,所以是个抽象方法)
婴儿:继承人这个抽象类,实现了选择一个合适卧姿的abstract方法
成人:继承人这个抽象类,实现了选择一个合适卧姿的abstract方法

当婴儿.睡觉 和成人.睡觉时 第③步就会调用自己的一个卧姿方法