为何/如何重构表单登录
首先,我们需要明确一点,为什么我们要重构之前的表单登录?
因为对于App来说,没有Cookie,所以不能使用Cookie+Session的方式对登录用户信息存储,就必须使用Token,然后SpringSecurityOAuth就是封装了一系列操作,最后返回Token,但是它只有四种授权模式,并没有直接表单登录,或者短信登录的方式,所以我们需要进行一些改变,来通过SpringSecurityOAuth帮我们实现Token的生成发放,最后实现App的登录以及登录状态保存。
通过上一节的学习,我们大致了解了SpringSecurityOAuth生成Token的流程,如下图
那么,我们要用的逻辑是哪块呢?就是最下面AuthorizationServerTokenServices
生成Token的逻辑,所以我们的实现流程就如下图:
首先我们之前的认证成功处理器的处理就是直接将Authorization
作为json形式返回,所以我们是有Authorization
这个对象的。
那么我们的目光就聚焦在OAuth2Request
上了,只要有了他就能调用DefaultTokenServices
生成Token,那么如何创建一个OAuth2Request
对象呢?
通过上节源码可知,它是由ClientDetails
和TokenRequest
生成的
ClientDetails
是由请求参数ClientId
作为参数,调用ClientDetailsService
生成的TokenRequest
就更简单了,是直接new
出来的,通过请求的几个参数和ClientDetails
总结,使用SpringSecurity OAuth重构表单登录的思路有三点:
- 代码写在
AuthorizationSuccessHandler
成功处理器里 - 最终目标是构建出
OAuth2Request
对象 - 构建对象需要从参数
ClientId
入手SpringSecurityOAuth重构表单登录
认证成功处理器
1 |
|
app模块加入安全配置
这里要加在资源服务器上配置,因为资源服务器才是需要安全认证的
1 |
|
这里复制了之前的browser模块配置,去掉了一些,保留了有用的
启动测试
使用Talend API插件,Postman也可以
请求后成功返回AccessToken
,接着我们使用这个Token去资源服务器请求
正确返回,说明我们使用SpringSecurityOAuth重构表单登录成功
SpringSecurityOAuth重构短信登录
这里简单说一下为什么要重构短信验证,之前我们将短信的校验码是保存在Session中的,但是App没有使用Session,所以需要重构
重构方式也很简单,就是之前在代码中所有使用sessionStrategy
进行保存,获取,移除验证码的操作都改为数据库读写操作。比如下图这行代码:
因为实现比较简单,并且对我们之前写的认证成功处理器返回Token没有任何修改,就不再做演示了。
SpringSecurityOAuth重构第三方登录
TODO
可以看下这两篇博客:使用简化模式重构第三方登录,使用授权码模式重构第三方登录