首页 > 其他分享 >注册中验证码实现(项目案例)

注册中验证码实现(项目案例)

时间:2023-09-05 11:01:39浏览次数:35  
标签:int random 验证码 案例 注册 new rands response


今天,给大家介绍验证码的相关配置问题。众所周知,对传统验证码而言,便捷和安全长期以来一直是鱼与熊掌的关系。这可从12306与黄牛的博弈中看出端倪。

最先开始,只是简单的数字英文组合,再后来有了加减法,相信一般人也可以应付。

注册中验证码实现(项目案例)_javascript


直到出现一闪一闪的动态验证码和变形字母,第一次体会到眼睛都快看瞎了,还有输不对的情况~

注册中验证码实现(项目案例)_javascript_02

但这些与后来的图片验证码相比,还只是小儿科,不信你看:

注册中验证码实现(项目案例)_spring_03

网友戏称:不懂娱乐圈,没资格买票回家。

验证码相关配置

不过对于我们一般小型系统而言,那么复杂的验证码确实没必要,简单的英文数字组合肯定够了。

今天就给大家介绍如何配置英文数字组合验证码。

配置比较简单,首先在JSP界面引入验证码:

<div class="form-group">

<label for="yanzheng" class="col-sm-2 control-label">验证码</label>

<div class="col-sm-6">

  <input name="inputCode" value=""/>  

  <img border="0" src="${pageContext.request.contextPath }/checkCode" />

     <input type="button" value="换一张" onclick="history.go(0) "/>

</div>

</div>

然后引入工具类CheckCode:

public class CheckCodeServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws                    ServletException, IOException {

doPost(request,response);

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws                             ServletException, IOException {

   response.setContentType("image/jpeg");

   HttpSession session = request.getSession();

   int width = 60;

   int height = 20;

   //设置浏览器不要缓存此图片

   response.setHeader("Pragma", "No-cache");

   response.setHeader("Cache-Control", "no-cache");

   response.setDateHeader("Expires", 0);

   //创建内存图像并获得其图形上下文

   BufferedImage image = new BufferedImage(width,                                   height,BufferedImage.TYPE_INT_RGB);

   Graphics g = image.getGraphics();

    // 产生随机验证码

    //定义验证码的字符表

   String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

   char[] rands = new char[4];

   for(int i = 0; i < 4; i++) {

      int rand = (int) (Math.random() * 36);

      rands[i] = chars.charAt(rand);

   }

    // 产生图像

   //画背景

   g.setColor(new Color(0xDCDCDC));

   g.fillRect(0, 0, width, height);

   //随机产生120个干扰点

   for(int i = 0; i < 120; i++) {

      int x = (int)(Math.random() * width);

      int y = (int)(Math.random() * height);

      int red = (int)(Math.random() * 255);

      int green = (int)(Math.random() * 255);

      int blue = (int)(Math.random() * 255);

      g.setColor(new Color(red, green, blue));

      g.drawOval(x, y, 1, 0);

   }

   g.setColor(Color.BLACK);

   g.setFont(new Font(null, Font.ITALIC|Font.BOLD, 18));

   //在不同的高度上输出验证码的不同字符

   g.drawString("" + rands[0], 1, 17);

   g.drawString("" + rands[1], 16, 15);

   g.drawString("" + rands[2], 31, 18);

   g.drawString("" + rands[3], 46, 16);

   g.dispose();

   //将图像输出到客户端

   ServletOutputStream sos = response.getOutputStream();

   ByteArrayOutputStream baos = new ByteArrayOutputStream();

   ImageIO.write(image, "JPEG", baos);

   byte[] buffer = baos.toByteArray();

   response.setContentLength(buffer.length);

   sos.write(buffer);

   baos.close();

   sos.close();

   //将验证码放到 session 中

   session.setAttribute("checkCode", new String(rands));

}

}
 验证码放到session中后,在Controller中获取session,然后与前台输入对比:


 String sc=(String)session.getAttribute("checkCode");

 if(sc.equals(inputCode)){

   //对比验证码即可

 }

以上就是验证码的全部代码实现。如果你有任何问题,欢迎私信,我们共同交流讨论。


标签:int,random,验证码,案例,注册,new,rands,response
From: https://blog.51cto.com/u_14544277/7369621

相关文章

  • IRIS路由注册(接路由底层分析)
    IRIS路由注册实例化完Application对象,接着就是路由注册了。也就是类似下面的代码  看看api.Get 实现我们主要看app.Get("/home",HomeHandler)这个函数的实现。进入该Get函数的源码,发现调用者是APIBuilder结构体,如下:这是因为在Application结构体中嵌套了router.APIBuild......
  • 实战 图书馆系统管理案例
    config:敏感的配置一般都是在配置中心配置,比如consul或者阿波罗上面controller:写一些handler的,拿到参数要去调用service层的逻辑。(只负责接受参数,怎么绑定参数,要去调用哪个service的,handler的一个入口)service:service层才是正真的业务处理层。调用dao层的增删改查操作dao:只关心数据......
  • Java对象与json的转换使用的依赖是fastjson,转换的简单案例
    2023-09-04<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency>转换的简单案例packagecom.hh.json;importcom.alibaba.fastjson......
  • SpringBoot+Nacos+OpenFeign实现服务的注册、发现、远程调用
    一、概述微服务的开发必定会用到SpringBoot、Nacos(服务发现、注册、配置中心)、OpenFeign(服务远程调用,也就是通过注解调用其他服务的接口)。今天写这篇是想把这三个功能集成在一起。让他们一起参与微服务的开发工作。要实现的目标:nacos要能够注册及发现服务,openfeign......
  • 服务器数据恢复- 执行fsck导致Ext4分区无法挂载的数据恢复案例
    Ext4文件系统相关概念:块组:Ext4文件系统的空间被划分为若干个块组,每个块组内的结构大致相同。块组描述符表:每个块组都对应一个块组描述符,这些块组描述符统一放在文件系统的前部,称为块组描述符表。每个块组描述符大小为32字节,其主要描述块位图、i-节点位图及i-节点表的地址等信息。......
  • 验证码的工具类CheckCodeUtil
    2023-09-04packagecom.hh.util;importjavax.imageio.ImageIO;importjava.awt.*;importjava.awt.geom.AffineTransform;importjava.awt.image.BufferedImage;importjava.io.*;importjava.util.Arrays;importjava.util.Random;/***生成验证码工具类*/publ......
  • 如何批量注册多个Gmail账户且不会关联?
    Gmail是谷歌旗下的网络邮件服务,是全球最受欢迎的电子邮件服务,它的用途很广泛,具备全球性和通用性的特点。数百万人使用它,不分年龄、性别和地点。它也可以在多个平台上使用,包括网页、移动应用和桌面客户端。正因为如此,Gmail也有很多限制政策:一个IP地址只能登录四个Gmail账户;并且在使......
  • 振弦采集仪应用于水库大坝的解决案例
    水库大坝是保障人民生命财产安全的重要设施,而对大坝的安全监测也是至关重要的。为了更好地了解和监测大坝的运行状态,振弦采集仪被广泛应用于水库大坝的解决方案中。振弦采集仪是一种能够准确测量和监测大坝振动的设备。它利用振弦传感器来捕捉大坝的振动信号,并将信号转化为电信号,......
  • Nacos 注册中心的设计原理:让你的应用轻松实现高效注册与发现!
    当应用开始脱离单机运行和访问时,服务发现就诞生了。目前的网络架构是每个主机都有⼀个独立的IP地址,服务发现基本都是通过某种方式获取到服务所部署的IP地址。DNS协议是最早将⼀个网络名称翻译为网络IP的协议,在最初的架构选型中,DNS+LVS+Nginx基本满足所有RESTful服务的发......
  • servlet,jsp,jstl用到的依赖与brand.jsp简单案例
    2023-09-03<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">&......