开发中遇到的问题&解决方案(九)

简介: 在我们的系统里验证码是必不可少的,比如注册登录时,忘记密码时,设置支付密码时或者支付下单时,那验证码的作用在哪里呢?其实就一条为了防止来着黑客和机器人恶意的攻击,那么下面我们来看看hutool里验证码工具类。

微信截图_20220531141644.png

前言

在我们的系统里验证码是必不可少的,比如注册登录时,忘记密码时,设置支付密码时或者支付下单时,那验证码的作用在哪里呢?其实就一条为了防止来着黑客和机器人恶意的攻击,那么下面我们来看看hutool里验证码工具类。 一.验证码组成 一般的验证码由两部分组成,一是背景的干扰线,二是用于验证的验证码,验证码可以是数字+英文(大小写),也可以是纯中文,也可以是12306网站那种找出同类似的图片,另外一种就是最近几年出来滑块验证,可以看看下面的思维导图。

微信截图_20220531141718.png 二.生成验证码的主要方法解读 1.创建验证码图像,这里是以数字和字母为基础生成验证码,当然也可以自定义生成

public Image createImage(String code) {
   // 图像buffer
   final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
   final Graphics2D g = GraphicsUtil.createGraphics(image, ObjectUtil.defaultIfNull(this.background, Color.WHITE));
   // 干扰线
   drawInterfere(g);
   // 字符串
   drawString(g, code);
   return image;
}
复制代码

2.随机干扰线的绘制

private void drawInterfere(Graphics2D g) {
   final ThreadLocalRandom random = RandomUtil.getRandom();
   // 随机干扰线
   for (int i = 0; i < this.interfereCount; i++) {
      int xs = random.nextInt(width);
      int ys = random.nextInt(height);
      int xe = xs + random.nextInt(width / 8);
      int ye = ys + random.nextInt(height / 8);
      //颜色随机
      g.setColor(ImgUtil.randomColor(random));
      //根据坐标绘制
      g.drawLine(xs, ys, xe, ye);
   }
}
复制代码

3.验证验证码是否正确,这个是很普通的校验,如果需要更加严谨的则需要加一下时间一起匹配校验

public boolean verify(String code, String userInputCode) {
   if (StrUtil.isNotBlank(userInputCode)) {
   //验证码验证一般都是忽略大小写的
   //另外一般在开发中对于英文如果不是强校验大小写都忽略一下大小写
      return StrUtil.equalsIgnoreCase(code, userInputCode);
   }
   return false;
}
复制代码

小结

验证码只是系统里的安全防范的第一道墙,日常开发中还有比如token,权限等校验,如果是社区类的网站还有防刷等功能,一定时刻谨记安全是最最最重要的的。

目录
相关文章
|
7月前
|
算法 Java 调度
死锁预防与解决方案
死锁预防与解决方案
|
Java Spring
解决方案 --[restartedMain] o.s.b.d.LoggingFailureAnalysisReporter :
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. ERROR 9680 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter
|
存储 编解码 监控
报告厅解决方案
大型单位、企业都建有报告厅,单位搭建报告厅的目的是为了召开各类会议、学术讨论、演讲、报告、新闻发布、多媒体教学培训、观看电影等活动提供卓越的音质效果、清晰的画面显示以及简单便捷的集中控制。报告厅通常会涉及举办活动时将现场画面的保存记录、活动画面以直播的形式在报告厅之外的其他屏幕上观看(因为报告厅容纳人数有限的原因)。针对这两个需求我们做了以下解决方案
|
SQL NoSQL Oracle
开发中遇到的问题&解决方案(二)
一个软件系统最重要的是什么?毫无疑问是数据,那什么是数据的&#39;运载体&#39;,什么作为后端与数据库的桥梁和沟通者呢,是SQL。我是Java开发出身,大学课程当时学习的是SQL Server,而且后面工作中实际用到过Oracle,DB2以及使用的最普遍的My SQL,至于No SQL 这一类下的常用的就是Redis和MongoDB了,这些后面再详细举例说明。今天讲的案列与表情相关,那么接下来进入今天的主题。
172 0
开发中遇到的问题&解决方案(二)
|
Java Linux 数据安全/隐私保护
开发中遇到的问题&解决方案(六)
之前的项目里有用到FTP,需要使用FTP把图片及一些必要文件上传到第三方的FTP服务器上,所以会涉及FTP连接,创建用户,创建文件夹,文件上传等,项目里选用的还是hutool包装的FTP工具类,下面来看看这些功能的在hutool里是怎么包装的。
540 0
开发中遇到的问题&解决方案(六)
|
设计模式 前端开发 Java
开发中遇到的问题&解决方案(一)
在开发过程在我们往往会遇到很多的开发阻碍或者因为原生框架的不支持导致的一系列问题或者有的不是问题,是我们使用普通的大量的复制粘贴改改就能用的代码去实现功能,这样使得代码很冗余,我们能不能去尝试找一些好的方案比如采用设计模式这些去优化我们的代码,实现代码简洁明了,易扩展呢?答案是肯定的。这个系列文章会使用案列加解决方案的形式为大家讲解,那下面我们开始吧。
755 0
开发中遇到的问题&解决方案(一)
开发中遇到的问题&解决方案(四)
今天继续hutool工具类的认识,废话不多说下面直接进入主题。
312 0
开发中遇到的问题&解决方案(四)
|
网络协议 数据安全/隐私保护
开发中遇到的问题&解决方案(七)
邮件发送相信大家都不陌生吧,一般是用于电商平台比如京东下单后订单信息的邮件发送或者移动这种的月度账单的邮件发送,再有就是通过绑定的邮箱进行密码重置,由邮箱跳转到指定的密码重置页进行密码重置操作。那么下面我们来看看hutool里对于邮件发送的包装是怎么样的。
207 0
开发中遇到的问题&解决方案(七)
|
数据安全/隐私保护
开发中遇到的问题&解决方案(五)
在开发过程中,图片是必不可少的,除了图片的上传下载以外,图片压缩也是很常见的。 下面我们来看看hutool工具类里图片压缩的方法。
372 0
开发中遇到的问题&解决方案(五)
|
Java 数据库 微服务
开发中遇到的问题&解决方案(三)
我们在日常的开发中会使用到很多工具类,比如最常用的Http请求的,或者日期工具类,处理时间差或者对日期进行特殊处理的,还有就是图片上传类的,比如阿里云或者腾讯云得SSO图片上传,以及Excel文件的导入导出。那这些工具类基本上都是跟着项目的,就是每个项目都写各自的工具类,如果分工明确细化到小组那重复代码就多了,那把工具类集成成一个项目类呢,由一个人去维护这个工具类工程,如果是微服务项目就是一个工具类的微服务,这样做的好处就很明显了,至少公司的研发部在使用到常用的工具类时不必再去网上找到。
324 0
开发中遇到的问题&解决方案(三)