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 相关文章推荐
vue3.0实现插件封装
Dec 14 Vue.js
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
Dec 15 Vue.js
Vue——前端生成二维码的示例
Dec 19 Vue.js
vue项目如何监听localStorage或sessionStorage的变化
Jan 04 Vue.js
vue实现防抖的实例代码
Jan 11 Vue.js
详解template标签用法(含vue中的用法总结)
Jan 12 Vue.js
浅谈Vue开发人员的7个最好的VSCode扩展
Jan 20 Vue.js
学习 Vue.js 遇到的那些坑
Feb 02 Vue.js
vue如何使用rem适配
Feb 06 Vue.js
vue+spring boot实现校验码功能
May 27 Vue.js
vue实现列表拖拽排序的示例代码
Apr 08 Vue.js
vue el-table实现递归嵌套的示例代码
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
PHP新手上路(六)
2006/10/09 PHP
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
2011/07/17 PHP
PHP实现简单实用的验证码类
2015/07/29 PHP
php批量删除超链接的实现方法
2015/10/19 PHP
YII Framework框架教程之缓存用法详解
2016/03/14 PHP
php实现的简单多进程服务器类完整示例
2020/02/01 PHP
PHP+MySql实现一个简单的留言板
2020/07/19 PHP
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
ExtJS 学习专题(一) 如何应用ExtJS(附实例)
2010/03/11 Javascript
window.location.hash 属性使用说明
2010/03/20 Javascript
改变javascript函数内部this指针指向的三种方法
2010/04/23 Javascript
js/jquery去掉空格,回车,换行示例代码
2013/11/05 Javascript
在JavaScript中判断整型的N种方法示例介绍
2014/06/18 Javascript
浅谈node.js中async异步编程
2015/10/22 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
vue2.0实现导航菜单切换效果
2017/05/08 Javascript
VUE中使用Vue-resource完成交互
2017/07/21 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
JS如何获取地址栏的参数实例讲解
2018/10/06 Javascript
JS实现的新闻列表自动滚动效果示例
2019/01/30 Javascript
Python中遇到的小问题及解决方法汇总
2017/01/11 Python
python3+PyQt5实现拖放功能
2018/04/24 Python
django中模板的html自动转意方法
2018/05/27 Python
利用python和ffmpeg 批量将其他图片转换为.yuv格式的方法
2019/01/08 Python
python IP地址转整数
2020/11/20 Python
html5 postMessage解决跨域、跨窗口消息传递方案
2016/12/20 HTML / CSS
Coccinelle官网:意大利的著名皮具品牌
2019/05/15 全球购物
怎样写好自我评价呢?
2014/02/16 职场文书
班干部竞选演讲稿
2014/04/24 职场文书
签约仪式策划方案
2014/06/02 职场文书
团组织推优材料
2014/12/29 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
2015年保险公司内勤工作总结
2015/05/23 职场文书
Apache压力测试工具的安装使用
2021/03/31 Servers
Mysql外键约束的创建与删除的使用
2022/03/03 MySQL