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 19 Vue.js
vue element实现表格合并行数据
Nov 30 Vue.js
详解template标签用法(含vue中的用法总结)
Jan 12 Vue.js
vue 计算属性和侦听器的使用小结
Jan 25 Vue.js
Vue接口封装的完整步骤记录
May 14 Vue.js
vue3使用vue-router的完整步骤记录
Jun 20 Vue.js
一定要知道的 25 个 Vue 技巧
Nov 02 Vue.js
vue中 this.$set的使用详解
Nov 17 Vue.js
前端vue+express实现文件的上传下载示例
Feb 18 Vue.js
Vue的列表之渲染,排序,过滤详解
Feb 24 Vue.js
在vue中import()语法不能传入变量的问题及解决
Apr 01 Vue.js
vue整合百度地图显示指定地点信息
Apr 06 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
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
CI框架装载器Loader.php源码分析
2014/11/04 PHP
PHP版QQ互联OAuth示例代码分享
2015/07/05 PHP
jquery BS,dialog控件自适应大小
2009/07/06 Javascript
JavaScript 编写匿名函数的几种方法
2010/02/21 Javascript
15条JavaScript最佳实践小结
2013/08/09 Javascript
jquery实现在页面加载的时自动为日期插件添加当前日期
2014/08/20 Javascript
IE8中动态创建script标签onload无效的解决方法
2014/12/22 Javascript
JavaScript动态生成二维码图片
2016/04/20 Javascript
JS作用域闭包、预解释和this关键字综合实例解析
2016/12/16 Javascript
Vue中定义全局变量与常量的各种方式详解
2017/08/23 Javascript
jQuery UI实现动画效果代码分享
2018/08/19 jQuery
NodeJS服务器实现gzip压缩的示例代码
2018/10/12 NodeJs
vuex的module模块用法示例
2018/11/12 Javascript
图文详解vue框架安装步骤
2019/02/12 Javascript
基于JS实现前端压缩上传图片的实例代码
2019/05/14 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
2019/10/23 Javascript
100行代码实现vue表单校验功能(小白自编)
2019/11/19 Javascript
Vue Element校验validate的实例
2020/09/21 Javascript
Django视图和URL配置详解
2018/01/31 Python
Python基于win32ui模块创建弹出式菜单示例
2018/05/09 Python
浅谈图像处理中掩膜(mask)的意义
2020/02/19 Python
基于logstash实现日志文件同步elasticsearch
2020/08/06 Python
加拿大购物频道:The Shopping Channel
2016/07/21 全球购物
英国独特礼物想法和个性化礼物网站:notonthehighstreet.com
2018/04/16 全球购物
英国顶尖手表珠宝品牌独家授权经销商:HS Johnson
2020/10/28 全球购物
电脑饰品店的创业计划书
2014/01/21 职场文书
学习之星事迹材料
2014/05/17 职场文书
银行金融服务方案
2014/06/11 职场文书
刑事代理授权委托书
2014/09/17 职场文书
寒暑假实习证明书模板
2014/11/29 职场文书
离婚起诉状范本
2015/05/19 职场文书
2019初中学生入团申请书
2019/06/27 职场文书
用Python将库打包发布到pypi
2021/04/13 Python
Linux中Nginx的防盗链和优化的实现代码
2021/06/20 Servers
Python+Selenium自动化环境搭建与操作基础详解
2022/03/13 Python