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 18 Vue.js
vue打开其他项目页面并传入数据详解
Nov 25 Vue.js
对vue生命周期的深入理解
Dec 03 Vue.js
vue实现登录、注册、退出、跳转等功能
Dec 23 Vue.js
vue 动态创建组件的两种方法
Dec 31 Vue.js
详解vue之自行实现派发与广播(dispatch与broadcast)
Jan 19 Vue.js
如何管理Vue中的缓存页面
Feb 06 Vue.js
vue使用lodop打印控件实现浏览器兼容打印的方法
Feb 07 Vue.js
基于vue的video播放器的实现示例
Feb 19 Vue.js
Vue3.0写自定义指令的简单步骤记录
Jun 27 Vue.js
Vue操作Storage本地化存储
Apr 29 Vue.js
el-table-column 内容不自动换行的解决方法
Aug 14 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
了解Joomla 这款来自国外的php网站管理系统
2010/03/11 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
2014/07/25 PHP
PHP手机号中间四位用星号*代替显示的实例
2017/06/02 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
php和asp语法上的区别总结
2019/05/12 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
js setattribute批量设置css样式
2009/11/26 Javascript
理解Javascript_02_理解undefined和null
2010/10/11 Javascript
JS中类或对象的定义说明
2014/03/10 Javascript
让alert不出现弹窗的两种方法
2014/05/18 Javascript
js实现页面跳转重定向的几种方式
2014/05/29 Javascript
javascript中的this详解
2014/12/08 Javascript
Jquery数字上下滚动动态切换插件
2015/08/08 Javascript
javascript常用的设计模式
2017/02/09 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
Vue.js项目模板搭建图文教程
2017/09/20 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
详解webpack4.x之搭建前端开发环境
2019/03/28 Javascript
JS函数本身的作用域实例分析
2020/03/16 Javascript
python按照多个字符对字符串进行分割的方法
2015/03/17 Python
python魔法方法-自定义序列详解
2016/07/21 Python
python使用opencv进行人脸识别
2017/04/07 Python
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
python使用numpy读取、保存txt数据的实例
2018/10/14 Python
python基于opencv检测程序运行效率
2019/12/28 Python
Pytorch实现神经网络的分类方式
2020/01/08 Python
python中pickle模块浅析
2020/12/29 Python
PyQt5通过信号实现MVC的示例
2021/02/06 Python
Photobook澳大利亚:制作相片书,婚礼卡,旅行相簿
2017/01/12 全球购物
职业生涯规划设计步骤
2014/01/12 职场文书
煤矿安全协议书
2014/08/20 职场文书
2014年安全工作总结范文
2014/11/13 职场文书
建筑技术负责人岗位职责
2015/04/13 职场文书
2015年端午节活动方案
2015/05/05 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书
教师信息技术学习心得体会
2016/01/21 职场文书