Spring Security实现短信验证码登录

栏目: Java · 发布时间: 6年前

内容简介:Spring Security默认的一个实现是使用用户名密码登录,当初我们在开始做项目时,也是先使用这种登录方式,并没有多考虑其他的登录方式。而后面需求越来越多,我们需要支持短信验证码登录了,这时候再看了解Spring Security中如何实现短信验证码登录。这里有一篇文章:我们知道默认的方式是,数据库里的user表保存了username和password,其中后者是密文保存。当用户登录时,Spring Security会拿用户传过来的密码进行加密后和数据库中password的值进行比较,相同则登录成功。
Spring Security实现短信验证码登录

Spring Security默认的一个实现是使用用户名密码登录,当初我们在开始做项目时,也是先使用这种登录方式,并没有多考虑其他的登录方式。而后面需求越来越多,我们需要支持短信验证码登录了,这时候再看了解Spring Security中如何实现短信验证码登录。

这里有一篇文章: SpringBoot 集成 Spring Security(8)——短信验证码登录 ,提供了一种比较正规的方法来解决这个问题,比如需要写filter类等等。但是我们需要临时性解决这个问题,于是就通过了其它非常规手段来实现。

我们知道默认的方式是,数据库里的user表保存了username和password,其中后者是密文保存。当用户登录时,Spring Security会拿用户传过来的密码进行加密后和数据库中password的值进行比较,相同则登录成功。如果是短信登录,需要传入的是手机号和验证码,比如叫phone和verification_code。

在我们的数据库中,username和phone都是唯一的,那我们想达到的效果就是,让对phone和 verification_code的校验转变成对username和password的校验就好了。这样一来,实现的逻辑如下:

在user表中添加一个字段verification_code,等用户获取手机验证码时,后端将返回给用户的验证码进行加密,加密方式和对password的处理一样,然后保存到 verification_code 字段中。然后用户在输入手机号和验证码登录时,我们根据手机号获取用户的username,然后将username和验证码传给获取token的接口,让这个接口以为我们使用的是用户名密码的登录方式,但是这个password值需要使用 verification_code字段的值来代替就好了。

那又怎么将 verification_code的值替换password值返回给Spring Security呢?

我们有一个UserServiceDetail类,实现了UserDetailsService接口,其中重载了方法:loadUserByUsername,Spring Security就是从这里拿到user表的password后进行比较判断的。那我们修改这个方法,如果是验证码登录方式,就把password属性设置成 verification_code的值,这样就欺骗了Spring Security,让它拿加密后的验证码去和password属性比较,如果相等也表示登录成功了。具体代码如下:

Spring Security实现短信验证码登录

这种做法确实有点绕,也不是正规的做法,但是因为我们对Spring Security这个流程有了一定程度的理解,就可以这么取巧来先达到目的,之后可能需要按正规的方式来做,因此不建议效仿,只是提供了另一种一种思路而已。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

美工神话

美工神话

聂小燕、赵秋轶 / 人民邮电出版社 / 2006 / 52.00元

本书是一本专门针对网页美工设计的图书,全面、细致地介绍利用 Dreamweaver 8 和 Photoshop CS2 进行创意和设计的具体方法和步骤。 全书共分为4篇12章,在阐述网页色彩设计和风格创意的基础上,以生动的实例引导读者全面地掌握 Photoshop 网页元素设计与 Dreamweaver 网页布局美化。书中涉及了诸多网页美化所必须掌握的知识点,比如色彩知识,风格创意,网页规划......一起来看看 《美工神话》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试