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单元格多列合并的实现
Nov 26 Vue.js
vue 在单页面应用里使用二级套嵌路由
Dec 19 Vue.js
vue3使用vue-count-to组件的实现
Dec 25 Vue.js
vue3中轻松实现switch功能组件的全过程
Jan 07 Vue.js
基于vuex实现购物车功能
Jan 10 Vue.js
vue实现一个获取按键展示快捷键效果的Input组件
Jan 13 Vue.js
Vue中的nextTick作用和几个简单的使用场景
Jan 25 Vue.js
Vue3 Composition API的使用简介
Mar 29 Vue.js
vue实现可拖拽的dialog弹框
May 13 Vue.js
Vue CLI中模式与环境变量的深入详解
May 30 Vue.js
vue实现滑动解锁功能
Mar 03 Vue.js
vue实现拖拽交换位置
Apr 07 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 程序授权验证开发思路
2009/07/09 PHP
Javascript 不能释放内存.
2006/09/07 Javascript
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
2011/04/27 Javascript
jQuery 一个图片切换的插件
2011/10/09 Javascript
到处都是jQuery选择器的年代 不了解它们的性能,行吗
2012/06/18 Javascript
IE下使用cloneNode注意事项分享
2012/11/22 Javascript
SeaJS入门教程系列之SeaJS介绍(一)
2014/03/03 Javascript
JavaScript表单通过正则表达式验证电话号码
2014/03/14 Javascript
一个简单的jquery进度条示例
2014/04/28 Javascript
Javascript中对象继承的实现小例
2014/05/12 Javascript
jquery实现搜索框常见效果的方法
2015/01/22 Javascript
js实现具有高亮显示效果的多级菜单代码
2015/09/01 Javascript
Jquery时间轴特效(三种不同类型)
2015/11/02 Javascript
jQuery+ajax实现文章点赞功能的方法
2015/12/31 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
JS实现的相册图片左右滚动完整实例
2016/11/23 Javascript
学好js,这些js函数概念一定要知道【推荐】
2017/01/19 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
基于JQuery实现页面定时弹出广告
2020/05/08 jQuery
利用Vue实现简易播放器的完整代码
2020/12/30 Vue.js
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
2015/02/04 Python
Python中的列表知识点汇总
2015/04/14 Python
Python判断值是否在list或set中的性能对比分析
2016/04/16 Python
python函数式编程学习之yield表达式形式详解
2018/03/25 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
2018/11/14 Python
pyqt5 textEdit、lineEdit操作的示例代码
2020/08/12 Python
护理专业本科生自荐信
2013/10/01 职场文书
党员实事承诺书
2014/03/26 职场文书
植物生产学专业求职信
2014/08/08 职场文书
关键在于落实心得体会
2014/09/03 职场文书
建筑工地文明标语
2014/10/09 职场文书
2014司机年终工作总结
2014/12/05 职场文书
大四学生个人总结
2015/02/15 职场文书
加强党性修养心得体会
2016/01/21 职场文书
会计入职心得体会
2016/01/22 职场文书
OpenCV-Python实现人脸磨皮算法
2021/06/07 Python