vue+spring boot实现校验码功能


Posted in Vue.js onMay 27, 2021

本文实例为大家分享了vue+spring boot实现校验码功能的具体代码,供大家参考,具体内容如下

用vue写了一个校验码来玩玩,样子如下:

vue+spring boot实现校验码功能

1.img标签

<img
     ="height:40px; width: 100px; cursor: pointer;"
     ref="imgIdentifyingCode"
     :src="selectedLogoPicture.imgUrl"
     class="logoImg"
 >

2.js代码

/**
     * 获取校验码
     */
    getIdentifyingCode() {
      let selft = this;
      //let pic = this.$refs.imgIdentifyingCode
      selft.loadingChack = true;
      let uuid = Utils.getUuid(32, 16);
      this.$store.state.uuid = uuid;
      this.$api.reader.getVerify(
        { responseType: "arraybuffer", uuid: uuid },
        r => {
          selft.loadingChack = false;
          selft.selectedLogoPicture.imgUrl = "data:image/png;base64," + r;
        }
      );
    },

3.controller

@RequestMapping("/getVerify")
 public void getVerify(@RequestParam String uuid, HttpServletRequest request, HttpServletResponse response) {
  response.setContentType("image/jpeg");// 设置相应类型,告诉浏览器输出的内容为图片
  response.setHeader("Pragma", "No-cache");// 设置响应头信息,告诉浏览器不要缓存此内容
  response.setHeader("Cache-Control", "no-cache");
  response.setDateHeader("Expire", 0);
  userService.getRandcodedDawTransparent(uuid, request, response);// 输出验证码图片方法
 }

4.service

@Override
 public void getRandcodedDawTransparent(String uuid, HttpServletRequest request, HttpServletResponse response) {
  try {
   Map<String, Object> map = CodeUtil.getRandcodedDawTransparent();
   // 将生成的随机字符串保存到session中
   log.info("==保存的uuid:"+uuid);
   log.info("==保存的code:"+map.get("code"));
   sessionUtil.saveCode(uuid, map.get("code"));

   response.setContentType("image/png");
   OutputStream out = response.getOutputStream();

   out.write((byte[]) map.get("img"));
   out.flush();
   out.close();
  } catch (IOException e) {
   log.error(e.getMessage());
  }
 }

5.util

public static Map<String, Object> getRandcodedDawTransparent() throws IOException {
  Map<String, Object> rsMap = new HashMap<>();
  // 创建BufferedImage对象
  BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
  // 获取Graphics2D
  Graphics2D g2d = image.createGraphics();

  // 增加下面代码使得背景透明
  image = g2d.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
  g2d.dispose();
  g2d = image.createGraphics();

  g2d.setFont(new Font("Times New Roman", Font.ROMAN_BASELINE, 18));// 字体大小
  g2d.setColor(getRandColor(110, 133));// 字体颜色

  // 绘制干扰线
  for (int i = 0; i <= lineSize; i++) {
   drowLine(g2d, width, height);
  }
  // 绘制随机字符
  String randomString = "";
  for (int i = 1; i <= stringNum; i++) {
   randomString = drowString(g2d, randomString, i);
  }
  log.info(randomString);
  rsMap.put("code", randomString);
  g2d.dispose();
  ByteArrayOutputStream baos = new ByteArrayOutputStream();// io流
  ImageIO.write(image, "png", baos);// 写入流中
  byte[] bytes = baos.toByteArray();// 转换成字节
  bytes = Base64.encodeBase64(bytes);
  rsMap.put("img", bytes);

  return rsMap;
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Vue.js 相关文章推荐
深入了解Vue3模板编译原理
Nov 19 Vue.js
Vue+element-ui添加自定义右键菜单的方法示例
Dec 08 Vue.js
vue 通过base64实现图片下载功能
Dec 19 Vue.js
详解Vue2的diff算法
Jan 06 Vue.js
如何在Vue项目中添加接口监听遮罩
Jan 25 Vue.js
vue-cli中实现响应式布局的方法
Mar 02 Vue.js
vue中axios封装使用的完整教程
Mar 03 Vue.js
vue打开新窗口并实现传参的图文实例
Mar 04 Vue.js
Vue CLI中模式与环境变量的深入详解
May 30 Vue.js
详解Vue的列表渲染
Nov 20 Vue.js
Vue实现跑马灯样式文字横向滚动
Nov 23 Vue.js
在vue中import()语法不能传入变量的问题及解决
Apr 01 Vue.js
vue-cropper组件实现图片切割上传
May 27 #Vue.js
vue-cropper插件实现图片截取上传组件封装
May 27 #Vue.js
HTML+VUE分页实现炫酷物联网大屏功能
Vue实现动态查询规则生成组件
详解vue身份认证管理和租户管理
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
vue-element-admin项目导入和导出的实现
May 21 #Vue.js
You might like
一步一步学习PHP(8) php 数组
2010/03/05 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
2013/12/25 PHP
Win2003+apache+PHP+SqlServer2008 配置生产环境
2014/07/29 PHP
通过php修改xml文档内容的方法
2015/01/23 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
js CSS操作方法集合
2008/10/31 Javascript
关于setInterval、setTimeout在jQuery中的使用注意事项
2011/09/28 Javascript
myEvent.js javascript跨浏览器事件框架
2011/10/24 Javascript
jQuery实现id模糊查询的小例子
2013/03/19 Javascript
jquery查找tr td 示例模拟
2014/05/08 Javascript
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
JS中split()用法(将字符串按指定符号分割成数组)
2016/10/24 Javascript
jQuery时间日期三级联动(推荐)
2016/11/27 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
2016/12/16 Javascript
JavaScript 实现 Tab 点击切换实例代码
2017/03/25 Javascript
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
2017/07/09 Javascript
React Native验证码倒计时工具类分享
2017/10/24 Javascript
vuejs点击class变化的实例
2018/09/05 Javascript
vue+elementUI实现表单和图片上传及验证功能示例
2019/05/14 Javascript
jQuery插件simplePagination的使用方法示例
2020/04/28 jQuery
js实现简单图片拖拽效果
2021/02/22 Javascript
Python字符转换
2008/09/06 Python
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
2017/11/09 Python
基于DataFrame筛选数据与loc的用法详解
2018/05/18 Python
Python requests模块实例用法
2019/02/11 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
2020/06/10 Python
CSS3制作缩略图的详细过程
2016/07/08 HTML / CSS
美国最大的团购网站:Groupon
2016/07/23 全球购物
韩国休闲女装品牌网站:ANAIS
2016/08/24 全球购物
中科软笔试题和面试题
2014/10/07 面试题
应届生财务会计求职信
2013/11/05 职场文书
mysql备份策略的实现(全量备份+增量备份)
2021/07/07 MySQL