当前位置: 首页 > news >正文

RuoYi-Vue开源项目2-前端登录验证码生成过程分析

前端登录验证码实现过程

  • 生成过程分析

在这里插入图片描述

生成过程分析

验证码的生成过程简单概括为:前端登录页面加载时,向后端发送一个请求,返回验证码图片给前端页面展示

  1. 前端页面加载触发代码:
	import { getCodeImg } from "@/api/login";created() {this.getCode();this.getCookie();},// 1.页面初始化页面调用的验证码加载函数getCode() {getCodeImg().then(res => {this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled;if (this.captchaEnabled) {this.codeUrl = "data:image/gif;base64," + res.img;this.loginForm.uuid = res.uuid;}});},// 2.获取验证码APIexport function getCodeImg() {return request({url: '/captchaImage',headers: {isToken: false},method: 'get',timeout: 20000})}// 3.axios请求const service = axios.create({// axios中请求配置有baseURL选项,表示请求URL公共部分baseURL: process.env.VUE_APP_BASE_API,// 超时timeout: 10000})// 4.解决跨域问题,将前端的URL替换成后端可识别的URLproxy: {// detail: https://cli.vuejs.org/config/#devserver-proxy[process.env.VUE_APP_BASE_API]: {target: `http://localhost:8080`,changeOrigin: true,pathRewrite: {['^' + process.env.VUE_APP_BASE_API]: ''}}},
}

细节说明:

  • created钩子下执行的代码时机是在页面刚刚加载后执行的,因此主要调用了getCodeImg()方法
  • @/可以理解为src/
  • getCodeImg()使用axios向后端发送请求
  • 前端vue.config.js文件中proxy解决请求跨域问题
  1. 后端请求代码分析
    快速查询请求小妙招:
    在这里插入图片描述
    在这里插入图片描述
    后端核心逻辑
  • 判断验证码校验是否开启
  • 生成验证码,验证码的题目被转换成验证码图片,验证码答案存入Redis中,Key为固定验证码字符串头部+UUID
  • 验证码图片写入转换流中,Base64.encode("转换流.toByteArray()")存入Ajax,UUID存入Ajax返回给前端
  • 前端接收为this.codeUrl = "data:image/gif;base64," + res.img;,使用codeUrl可以直接展示

相关文章:

  • C++提高笔记(五)---STL容器(set/multiset、map/multimap)
  • flutter 局部view更新,dialog更新进度,dialog更新
  • 【热门话题】深入浅出:npm常用命令详解与实践
  • Redis监控工具
  • mac安装rust开发环境,使用brew安装和全局配置
  • 【GPT-SOVITS-03】SOVITS 模块-生成模型解析
  • 【NTN 卫星通信】 TN和多NTN配合的应用场景
  • shardingsphere-elastic-job-ui 管理界面安装
  • 数据分析-Pandas数据分类的转换控制
  • 速盾cdn:cdn节点缓存内容不一致怎么办?
  • 面试经典-MySQL篇
  • MQTT和Modbus的物联网网关协议区别分析
  • 上位机图像处理和嵌入式模块部署(qmacvisual畸变矫正)
  • [Java、Android面试]_05_内存泄漏和内存溢出
  • 由浅到深认识C语言(13):共用体
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Angular数据绑定机制
  • CSS中外联样式表代表的含义
  • github指令
  • iOS | NSProxy
  • javascript 哈希表
  • Java读取Properties文件的六种方法
  • java概述
  • LeetCode18.四数之和 JavaScript
  • Lsb图片隐写
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Sublime text 3 3103 注册码
  • vue脚手架vue-cli
  • 编写符合Python风格的对象
  • 对象管理器(defineProperty)学习笔记
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 复习Javascript专题(四):js中的深浅拷贝
  • 关于Flux,Vuex,Redux的思考
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 前端面试题总结
  • 前端之React实战:创建跨平台的项目架构
  • 巧用 TypeScript (一)
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 如何合理的规划jvm性能调优
  • 十年未变!安全,谁之责?(下)
  • 协程
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​Java并发新构件之Exchanger
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # include “ “ 和 # include < >两者的区别
  • #1015 : KMP算法
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • #微信小程序(布局、渲染层基础知识)
  • (07)Hive——窗口函数详解
  • (2)nginx 安装、启停
  • (C)一些题4
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Note)C++中的继承方式