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项目如何引入bootstrap、elementUI、echarts
Nov 26 Vue.js
ESLint 是如何检查 .vue 文件的
Nov 30 Vue.js
Vue.extend 登录注册模态框的实现
Dec 29 Vue.js
vue动态设置路由权限的主要思路
Jan 13 Vue.js
如何在vue 中使用柱状图 并自修改配置
Jan 21 Vue.js
Vue如何实现变量表达式选择器
Feb 18 Vue.js
vue项目实现分页效果
Mar 24 Vue.js
Vue详细的入门笔记
May 10 Vue.js
HTML+VUE分页实现炫酷物联网大屏功能
May 27 Vue.js
Vue操作Storage本地化存储
Apr 29 Vue.js
vue实现在data里引入相对路径
Jun 05 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
德劲1103二次变频版的打磨
2021/03/02 无线电
PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)
2011/11/10 PHP
设置php页面编码的两种方法示例介绍
2014/03/03 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
浅谈javascript函数式编程
2015/09/06 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
JavaScript+html5 canvas制作的百花齐放效果完整实例
2016/01/26 Javascript
原生javascript实现addClass,removeClass,hasClass函数
2016/02/25 Javascript
字符串反转_JavaScript
2016/04/28 Javascript
设置点击文本框或图片弹出日历控件的实现代码
2016/05/12 Javascript
倾力总结40条常见的移动端Web页面问题解决方案
2016/05/24 Javascript
Angularjs 制作购物车功能实例代码
2016/09/14 Javascript
Vuex之理解Store的用法
2017/04/19 Javascript
微信小程序实现皮肤功能(夜间模式)
2017/06/18 Javascript
JS使用正则表达式找出最长连续子串长度
2017/10/26 Javascript
echarts学习笔记之箱线图的分析与绘制详解
2017/11/22 Javascript
Vue header组件开发详解
2018/01/26 Javascript
es6函数之rest参数用法实例分析
2020/04/18 Javascript
python使用7z解压软件备份文件脚本分享
2014/02/21 Python
Python之父谈Python的未来形式
2016/07/01 Python
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
python将字符串转换成json的方法小结
2019/07/09 Python
使用django自带的user做外键的方法
2020/11/30 Python
CSS3实现多重边框的方法总结
2016/05/31 HTML / CSS
HTML+CSS3+JS 实现的下拉菜单
2020/11/25 HTML / CSS
经典c++面试题三
2015/07/08 面试题
shallow copy和deep copy的区别
2016/05/09 面试题
介绍一下linux的文件权限
2012/02/15 面试题
乡镇四风对照检查材料
2014/08/31 职场文书
公司优秀员工推荐信
2015/03/24 职场文书
旅行社计调工作总结
2015/08/12 职场文书
纪检部部长竞选稿
2015/11/21 职场文书
志愿者工作心得体会
2016/01/15 职场文书
在pyCharm中下载第三方库的方法
2021/04/18 Python
python中的装饰器该如何使用
2021/06/18 Python
Python列表的索引与切片
2022/04/07 Python