点击关注公众号,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();}}

验证码获取和查看

图片

图片

1、高德一面:高德导航红绿灯为啥能读秒?

2、这个“临时方案” Windows 用了 30 年,网友:段子源于现实

3、多去跑一下Java后端面试,你就会发现..

4、为什么国外JetBrains做 IDE 就可以养活自己,国内不行?区别在哪?

5、相比高人气的Rust、Go,为何 Java、C 在工具层面进展缓慢?

6、【SpringBoot】 如何做到无感刷新token?

点在看

本篇文章来源于微信公众号: Java技术迷



微信扫描下方的二维码阅读本文

此作者没有提供个人介绍
最后更新于 2024-08-01