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添加自定义右键菜单的完整实例
Dec 08 Vue.js
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
Dec 19 Vue.js
vue 在单页面应用里使用二级套嵌路由
Dec 19 Vue.js
Vue实现随机验证码功能
Dec 29 Vue.js
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
Jan 22 Vue.js
vue使用transition组件动画效果的实例代码
Jan 28 Vue.js
Vue单页面应用中实现Markdown渲染
Feb 14 Vue.js
vue中data改变后让视图同步更新的方法
Mar 29 Vue.js
vue3中的组件间通信
Mar 31 Vue.js
vue基于Teleport实现Modal组件
May 31 Vue.js
vue实现列表垂直无缝滚动
Apr 08 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调整服务器时间的方法
2015/04/03 PHP
Yii2中cookie用法示例分析
2016/07/18 PHP
PHP表单验证内容是否为空的实现代码
2016/11/14 PHP
thinkPHP5.0框架配置格式、加载解析与读取方法
2017/03/17 PHP
关于javascript 回调函数中变量作用域的讨论
2009/09/11 Javascript
JavaScript 学习笔记 Black.Caffeine 09.11.28
2009/11/30 Javascript
jQuery初学:find()方法及children方法的区别分析
2011/01/31 Javascript
jquery中ajax学习笔记一
2011/10/16 Javascript
JS实现的最简Table选项卡效果
2015/10/14 Javascript
JavaScript实现同时调用多个函数的方法
2015/11/09 Javascript
javascript基础语法学习笔记
2016/01/04 Javascript
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
2016/08/09 Javascript
轻松实现js选项卡切换效果
2016/09/24 Javascript
微信小程序tabBar底部导航中文注解api详解
2017/08/16 Javascript
vue 文件目录结构详解
2017/11/24 Javascript
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
2019/03/01 Javascript
使用TS来编写express服务器的方法步骤
2020/10/29 Javascript
更改Ubuntu默认python版本的两种方法python-&gt; Anaconda
2016/12/18 Python
Python 迭代器与生成器实例详解
2017/05/18 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
2018/12/04 Python
Python爬虫实现爬取百度百科词条功能实例
2019/04/05 Python
python框架flask表单实现详解
2019/11/04 Python
python深copy和浅copy区别对比解析
2019/12/26 Python
python实现简单井字棋游戏
2020/03/04 Python
Python 绘制可视化折线图
2020/07/22 Python
python 无损批量压缩图片(支持保留图片信息)的示例
2020/09/22 Python
凯特·丝蓓英国官网:Kate Spade英国
2016/11/07 全球购物
Omio葡萄牙:全欧洲低价大巴、火车和航班搜索和比价
2019/02/09 全球购物
人力资源管理专业学生自我评价
2013/11/20 职场文书
中文师范生自荐信
2014/01/30 职场文书
《广玉兰》教学反思
2014/04/14 职场文书
道德之星事迹材料
2014/05/03 职场文书
社区六一儿童节活动总结
2015/02/11 职场文书
导游词之无锡唐城
2019/12/12 职场文书
CPU不支持Windows11系统怎么办
2021/11/21 数码科技