在前面几节中,我们获取到的令牌都是基于Spring Security OAuth2默认配置生成的,Spring Security允许我们自定义令牌配置,比如不同的client_id对应不同的令牌,令牌的有效时间,令牌的存储策略等;我们也可以使用JWT来替换默认的令牌。
Spring Security OAuth2自定义Token获取方式
在上一节Spring Security OAuth2入门中,我们使用了Spring Security OAuth2封装的授权码和密码模式成功获取了令牌,这节记录下如何通过自定义的用户名密码和手机短信验证码的方式来获取令牌。
自定义用户名密码方式获取令牌
在上一节的基础上,我们先在资源服务器上加入一些基本的Spring Security配置:
1 | @Configuration |
MyAuthenticationFailureHandler
失败处理器的逻辑很简单,就是认证失败放回相应提示:
1 | @Component |
问题的关键是,如何在登录成功处理器里返回令牌。在研究Spring Security OAuth2自带的令牌获取方式后,会发现令牌的产生可以归纳为以下几个步骤:
我们可以参考这个流程,来实现在登录成功处理器MyAuthenticationSucessHandler
里生成令牌并返回:
1 | @Component |
启动项目,使用postman发送登录请求localhost:8080/login:
点击发送后便可以成功获取到令牌:
1 | { |
使用这个令牌便可以成功访问/index
接口,这里就不演示了。
短信验证码获取令牌
在Spring Security短信验证码登录一节中,我们实现了通过短信验证码登录系统的功能,通过短信验证码获取令牌和它唯一的区别就是验证码的存储策略。之前的例子验证码存储在Session中,现在使用令牌的方式和系统交互后Session已经不适用了,我们可以使用第三方存储来保存我们的验证码(无论是短信验证码还是图形验证码都是一个道理),比如Redis等。
引入Redis依赖:
1 | <dependency> |
定义一个RedisCodeService
,用于验证码的增删改:
1 | /** |
然后将Spring Security短信验证码登录一节中的实现都挪到现在的Demo里,修改相应的地方(涉及到验证码的增删改的地方,具体可以参考下面的源码,这里就不赘述了)。
启动系统,使用postman发送验证码:
请求头中带上deviceId(这里为随便填写的模拟值):
点击发送后,控制台输出:
1 | 手机号17720202020的登录验证码为:619963,有效时间为120秒 |
接着用这个验证码去换取令牌,使用postman发送如下请求:
同样请求头中要带上deviceId和经过base64加密的client_id:client_secret
:
点击发送后,便可以成功获取到令牌:
1 | { |
源码链接:https://github.com/wuyouzhuguli/SpringAll/tree/master/64.Spring-Security-OAuth2-Customize
Vue入门学习
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。
本篇记录Vue学习过程,用于心得备忘,对外可读性差🙃,学习Vue还是以官方文档为主。
Spring Security OAuth2入门
OAuth是一种用来规范令牌(Token)发放的授权机制,主要包含了四种授权模式:授权码模式、简化模式、密码模式和客户端模式。Spring Security OAuth2对这四种授权模式进行了实现。这节主要记录下什么是OAuth2以及Spring Security OAuth2的基本使用。
Spring Security权限控制
Spring Security权限控制可以配合授权注解使用,具体有哪些注解可以参考Spring-Security保护方法。接着上一节,要开启这些注解,只需要在Spring Security配置文件中添加如下注解:
1 | @Configuration |
Spring Security退出登录
Spring Security默认的退出登录URL为/logout
,退出登录后,Spring Security会做如下处理:
是当前的Sesion失效;
清除与当前用户关联的RememberMe记录;
清空当前的SecurityContext;
重定向到登录页。
Spring Security允许我们通过配置来更改上面这些默认行为。
Spring Security Session管理
用户登录成功后,信息保存在服务器Session中,这节学习下如何管理这些Session。这节将在Spring Security短信验证码登录的基础上继续扩展。
Spring Security短信验证码登录
在Spring Security添加图形验证码一节中,我们已经实现了基于Spring Boot + Spring Security的账号密码登录,并集成了图形验证码功能。时下另一种非常常见的网站登录方式为手机短信验证码登录,但Spring Security默认只提供了账号密码的登录认证逻辑,所以要实现手机短信验证码登录认证功能,我们需要模仿Spring Security账号密码登录逻辑代码来实现一套自己的认证逻辑。