vue+springboot实现登录验证码


Posted in Vue.js onMay 27, 2021

本文实例为大家分享了vue+springboot实现登录验证码的具体代码,供大家参考,具体内容如下

先看效果图

vue+springboot实现登录验证码

在login页面添加验证码html

vue+springboot实现登录验证码

在后端pom文件添加kaptcha依赖

<dependency>
     <groupId>com.github.penggle</groupId>
     <artifactId>kaptcha</artifactId>
     <version>2.3.2</version>
</dependency>

创建KaptchaConfig工具类

package com.brilliance.module.system.controller.util;
 
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
import java.util.Properties;
 
@Configuration
public class KaptchaConfig {
    @Bean
    public DefaultKaptcha getDefaultKaptcha() {
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
        Properties properties = new Properties();
        // 图片宽
        properties.setProperty("kaptcha.image.width", "180");
        // 图片高
        properties.setProperty("kaptcha.image.height", "50");
        // 图片边框
        properties.setProperty("kaptcha.border", "yes");
        // 边框颜色
        properties.setProperty("kaptcha.border.color", "105,179,90");
        // 字体颜色
        properties.setProperty("kaptcha.textproducer.font.color", "blue");
        // 字体大小
        properties.setProperty("kaptcha.textproducer.font.size", "40");
        // session key
        properties.setProperty("kaptcha.session.key", "code");
        // 验证码长度
        properties.setProperty("kaptcha.textproducer.char.length", "4");
        // 字体
        properties.setProperty("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");
        Config config = new Config(properties);
        defaultKaptcha.setConfig(config);
        return defaultKaptcha;
    }
}

Controller中,生成的验证码存储在了redis中, 用于以后作校验(redis的配置以及依赖自行百度)

@RestController
@RequestMapping("/api/user")
@Api(tags = "系统用户管理")
public class SysUserController extends AbstractController{
 @Autowired
 private SysUserService sysUserService;
 @Autowired
 private DefaultKaptcha defaultKaptcha;
 
 @Autowired
 RedisTemplate redisTemplate;
 
 @GetMapping("/createImageCode")
 public void createImageCode(HttpServletRequest request, HttpServletResponse response) throws IOException {
  response.setHeader("Cache-Control", "no-store, no-cache");
  response.setContentType("image/jpeg");
  // 生成文字验证码
  String text = defaultKaptcha.createText();
  // 生成图片验证码
  BufferedImage image = defaultKaptcha.createImage(text);
  // 这里我们使用redis缓存验证码的值,并设置过期时间为60秒
  redisTemplate.opsForValue().set("imageCode",text,60, TimeUnit.SECONDS);
  ServletOutputStream out = response.getOutputStream();
  ImageIO.write(image, "jpg", out);
  out.flush();
  out.close();
 }

生成之后,在登录界面输入验证码需要进行校验输入的是否正确

vue+springboot实现登录验证码

在登录按钮外层加一次请求判断,验证输入的验证码是否正确,根据返回值提示错误信息

vue+springboot实现登录验证码

@PostMapping("/compareCode")
public RESULT compareCode(@RequestBody String verificationCode) {
    if(!redisTemplate.hasKey("imageCode")) {
  return RESULT.error(500,"验证码已过期");
 }
 String code = redisTemplate.opsForValue().get("imageCode").toString();
 if(StringUtils.equals(verificationCode,code)) {
  return RESULT.ok();
 } else {
  return RESULT.error(500,"验证码输入错误");
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
基于vue与element实现创建试卷相关功能(实例代码)
Dec 07 Vue.js
详解Vue的异步更新实现原理
Dec 22 Vue.js
vue 实现基础组件的自动化全局注册
Dec 25 Vue.js
jenkins自动构建发布vue项目的方法步骤
Jan 04 Vue.js
vue实现简易计算器功能
Jan 20 Vue.js
Vue如何实现变量表达式选择器
Feb 18 Vue.js
vue常用高阶函数及综合实例
Feb 25 Vue.js
Vue2.x-使用防抖以及节流的示例
Mar 02 Vue.js
vue实现可拖拽的dialog弹框
May 13 Vue.js
深入讲解Vue中父子组件通信与事件触发
Mar 22 Vue.js
vue使用element-ui按需引入
May 20 Vue.js
vue3 自定义图片放大器效果的示例代码
Jul 23 Vue.js
vue+spring boot实现校验码功能
May 27 #Vue.js
vue-cropper组件实现图片切割上传
May 27 #Vue.js
vue-cropper插件实现图片截取上传组件封装
May 27 #Vue.js
HTML+VUE分页实现炫酷物联网大屏功能
Vue实现动态查询规则生成组件
详解vue身份认证管理和租户管理
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
You might like
编写自己的php扩展函数
2006/10/09 PHP
PHP程序员面试 切忌急功近利(更需要注重以后的发展)
2010/09/01 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
2013/08/05 PHP
php顺序查找和二分查找示例
2014/03/27 PHP
使用tp框架和SQL语句查询数据表中的某字段包含某值
2019/10/18 PHP
『jQuery』取指定url格式及分割函数应用
2013/04/22 Javascript
js+csss实现的一个带复选框的下拉框
2014/09/29 Javascript
javascript封装 Cookie 应用接口
2015/08/07 Javascript
JavaScript 性能优化小结
2015/10/12 Javascript
jQuery层次选择器用法示例
2016/09/09 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
three.js绘制地球、飞机与轨迹的效果示例
2017/02/28 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
2017/04/07 jQuery
学习使用Bootstrap输入框、导航、分页等常用组件
2017/05/11 Javascript
jQuery 中msgTips 顶部弹窗效果实现代码
2017/08/14 jQuery
JS Input里添加小图标的两种方法
2017/11/11 Javascript
vue中父子组件注意事项,传值及slot应用技巧
2018/05/09 Javascript
利用d3.js实现蜂巢图表带动画效果
2019/09/03 Javascript
Vue实现base64编码图片间的切换功能
2019/12/04 Javascript
vue实现计算器功能
2020/02/22 Javascript
使用PDB模式调试Python程序介绍
2015/04/05 Python
python K近邻算法的kd树实现
2018/09/06 Python
Python3.5 Pandas模块之Series用法实例分析
2019/04/23 Python
python元组的概念知识点
2019/11/19 Python
jupyter notebook实现显示行号
2020/04/13 Python
python实现Oracle查询分组的方法示例
2020/04/30 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
2020/06/11 Python
利用python汇总统计多张Excel
2020/09/22 Python
浅析HTML5 Landmark
2020/09/11 HTML / CSS
任意存:BOXFUL
2018/05/21 全球购物
荷兰鞋类购物网站:Donelli
2019/05/24 全球购物
化妆品店促销方案
2014/02/24 职场文书
医学生职业生涯规划书范文
2014/03/13 职场文书
会议欢迎标语
2014/06/30 职场文书
忠诚教育学习心得体会
2016/01/23 职场文书
导游词之塘栖古镇
2019/12/04 职场文书