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 相关文章推荐
VUE+Element实现增删改查的示例源码
Nov 23 Vue.js
vue组件中节流函数的失效的原因和解决方法
Dec 02 Vue.js
Vue与React的区别和优势对比
Dec 18 Vue.js
Vue SPA 首屏优化方案
Feb 26 Vue.js
vue项目两种方式实现竖向表格的思路分析
Apr 28 Vue.js
vue基于Teleport实现Modal组件
May 31 Vue.js
Vue中foreach数组与js中遍历数组的写法说明
Jun 05 Vue.js
Vue过滤器(filter)实现及应用场景详解
Jun 15 Vue.js
Vue图片裁剪组件实例代码
Jul 02 Vue.js
vue3语法糖内的defineProps及defineEmits
Apr 14 Vue.js
vue使用element-ui按需引入
May 20 Vue.js
vue ant design 封装弹窗表单的使用
Jun 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乱码问题,UTF-8乱码常见问题小结
2012/04/09 PHP
PHP $_FILES中error返回值详解
2014/01/30 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
Javascript document.referrer判断访客来源网址
2020/05/15 Javascript
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
2012/04/20 Javascript
extjs关于treePanel+chekBox全部选中以及清空选中问题探讨
2013/04/02 Javascript
Javascript中call的两种用法实例
2013/12/13 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
require.js的用法详解
2015/10/20 Javascript
基于jquery实现图片上传本地预览功能
2016/01/08 Javascript
javascript匀速运动实现方法分析
2016/01/08 Javascript
简单实现的JQuery文本框水印插件
2016/06/14 Javascript
angular实现商品筛选功能
2017/02/01 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
2017/06/19 Javascript
axios 实现post请求时把对象obj数据转为formdata
2019/10/31 Javascript
JavaScript TAB栏切换效果的示例
2020/11/05 Javascript
[01:03:27]NAVI vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python使用Flask框架同时上传多个文件的方法
2015/03/21 Python
Python中的getopt函数使用详解
2015/07/28 Python
Python 中的lambda函数介绍
2018/10/10 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
python中元组的用法整理
2020/06/15 Python
Python通过len函数返回对象长度
2020/10/22 Python
Jupyter Notebook 远程访问配置详解
2021/01/11 Python
python 获取计算机的网卡信息
2021/02/18 Python
泰国时尚电商:POMELO Fashion
2020/03/11 全球购物
js正则匹配markdown里的图片标签的实现
2021/03/24 Javascript
生物化工专业个人自荐信
2013/09/26 职场文书
教师简历自我评价
2014/02/03 职场文书
竞选体育委员演讲稿
2014/04/26 职场文书
抗洪救灾感谢信
2015/01/22 职场文书
学术会议领导致辞
2015/07/29 职场文书
班主任培训研修日志
2015/11/13 职场文书
使用Python开发冰球小游戏
2022/04/30 Python