点击关注公众号,Java干货及时送达

来源:码畜君
-
前言 -
前后端未分离的验证码登录方案 -
验证码生成流程如下 -
登录验证流程如下 -
前后端分离的验证码登录方案 -
验证码生成流程如下 -
登录验证流程如下 -
动手撸轮子 -
Kaptcha介绍 -
新建项目并加入依赖 -
验证码获取和查看
前言
为了防止世界被破坏,为了守护世界的和平。。。说错了,重来~
为了防止验证系统被暴力破解,很多系统都增加了验证码效验,比较常见的就是图片二维码,业内比较安全的是短信验证码,当然还有一些拼图验证码,加入人工智能的二维码等等,我们今天的主题就是前后端分离的图片二维码登录方案。
前后端未分离的验证码登录方案
传统的项目大都是基于session交互的,前后端都在一个项目里面,比如传统的SSH项目或者一些JSP系统,当前端页面触发到获取验证码请求,可以将验证码里面的信息存在上下文中,所以登录的时候只需要 用户名、密码、验证码即可。
验证码生成流程如下

登录验证流程如下

可以发现,整个登录流程还是依赖session上下文的,并且由后端调整页面。
前后端分离的验证码登录方案
随着系统和业务的不停升级,前后端代码放在一起的项目越来越臃肿,已经无法快速迭代和职责区分了,于是纷纷投入了前后端分离的怀抱,发现代码和职责分离以后,开发效率越来越高了,功能迭代还越来越快,但是以前的验证码登录方案就要更改了。
验证码生成流程如下

对比原来的方案,增加了redis中间件,不再是存在session里面了,但是后面怎么区分这个验证码是这个请求生成的呢?所以我们加入了唯一标识符来区分
登录验证流程如下

可以发现,基于前后端分离的分布式项目登录方案对比原来,加了一个redis中间件和token返回,不再依赖上下文session,并且页面调整也是由后端换到了前端
动手撸轮子
基于验证码的轮子还是挺多的,本文就以Kaptcha这个项目为例,通过springboot项目集成Kaptcha来实现验证码生成和登录方案。
Kaptcha介绍
Kaptcha是一个基于SimpleCaptcha的验证码开源项目
我找的这个轮子是基于SimpleCaptcha二次封装的,maven依赖如下
packagecom.lzp.kaptcha.controller;importcom.lzp.kaptcha.dto.LoginDTO;importcom.lzp.kaptcha.utils.RedisUtils;importcom.lzp.kaptcha.vo.UserVO;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.web.bind.annotation.PostMapping;importorg.springframework.web.bind.annotation.RequestBody;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/user")publicclassUserController{@AutowiredprivateRedisUtilsredisUtils;@PostMapping("/login")publicUserVOlogin(@RequestBodyLoginDTOloginDTO){Objectcaptch=redisUtils.get(loginDTO.getCaptchaKey());if(captch==null){//throw验证码已过期}if(!loginDTO.getCaptcha().equals(captch)){//throw验证码错误}//查询用户信息//判断用户是否存在不存在抛出用户名密码错误//判断密码是否正确,不正确抛出用户名密码错误//构造返回到前端的用户对象并封装信息和生成tokenreturnnewUserVO();}}
验证码获取和查看


往 期 推 荐
2、这个“临时方案” Windows 用了 30 年,网友:段子源于现实
4、为什么国外JetBrains做 IDE 就可以养活自己,国内不行?区别在哪?
点分享
点收藏
点点赞
点在看
本篇文章来源于微信公众号: Java技术迷
微信扫描下方的二维码阅读本文







Comments NOTHING