Java实现验证码验证功能

  

Java如何实现验证码验证功能呢?日常生活中,验证码随处可见,他可以在一定程度上保护账号安全,那么他是怎么实现的呢?

  

Java实现验证码验证功能其实非常简单:用到了一个图形类在画板上绘制字母,随机选取一定数量的字母随机生成,然后在画板上随机生成几条干扰线。

  

首先,写一个验证码生成帮助类,用来绘制随机字母:

        & lt;跨度比进口java.awt.Color;   进口属性;   进口java.awt.Graphics;   进口java.awt.image.BufferedImage;   进口java.io.IOException;   进口java.io.OutputStream;   进口java.util.Random;   进口javax.imageio.ImageIO;   最后公共类GraphicHelper {/* *   *以字符串形式返回生成的验证码,同时输出一个图片   *   * @param宽度   *图片的宽度   * @param高度   *图片的高度   * @param imgType   *图片的类型   * @param输出   *图片的输出流(图片将输出到这个流中)   * @return返回所生成的验证码(字符串)   */公共静态字符串创建(int决赛int宽度,高度,最终字符串imgType OutputStream输出){   StringBuffer某人=new StringBuffer ();   随机随机=new随机();   BufferedImage图像=new BufferedImage(宽度、高度,BufferedImage.TYPE_INT_RGB);   图形图像=image.getGraphics ();   graphic.setColor (Color.getColor (“F8F8F8”));   图形。fillRect(0, 0,宽度、高度);   []=new颜色颜色[]{颜色。蓝色,颜色。灰色,颜色。绿色的颜色。红色,颜色。黑色、Color.ORANGE   颜色。青色};//在“画”板上生成干扰线条(50是线条个数)   for (int i=0;我& lt;50;我+ +){   graphic.setColor(颜色[random.nextInt (colors.length)]);   最后一个int x=random.nextInt(宽度);   最后一个int y=random.nextInt(高度);   最后一个int w=random.nextInt (20);   最后一个int h=random.nextInt (20);   最后一个int标记=random.nextBoolean () & # 63;1:1;   最后一个int signB=random.nextBoolean () & # 63;1:1;   图形。画直线(x, y, x + w *标记,y + h * signB);   }//在“画”板上绘制字母   图形。setFont(新字体(“Comic Sans MS字体。大胆、30));   for (int i=0;我& lt;6;我+ +){   最后一个int temp=random.nextInt (26) + 97;   字符串s=String.valueOf ((char)临时);   sb.append(年代);   graphic.setColor(颜色[random.nextInt (colors.length)]);   图形。拉带(年代,我*(宽/6),高度-(身高/3));   }   graphic.dispose ();   尝试{   ImageIO。写(图像、imgType、输出);   }捕捉(IOException e) {   e.printStackTrace ();   }   返回sb.toString ();   }   }   & lt;/span>之前      

接着,创建一个servlet,用来固定图片大小,以及处理验证码的使用场景,以及捕获页面生成的验证码(捕获到的二维码与用户输入的验证码一致才能通过)。

        & lt;跨度比进口java.io.IOException;   进口java.io.OutputStream;   进口javax.servlet.ServletException;   进口javax.servlet.annotation.WebServlet;   进口javax.servlet.http.HttpServlet;   进口javax.servlet.http.HttpServletRequest;   进口javax.servlet.http.HttpServletResponse;   进口javax.servlet.http.HttpSession;   @WebServlet (urlpattern="/验证/regist。做”)   公开课VerifyCodeServlet扩展HttpServlet {   私有静态最终长serialVersionUID=3398560501558431737 l;   @Override   保护无效服务(HttpServletRequest请求,HttpServletResponse响应)   抛出ServletException IOException {//获得当前请求对应的会话对象   HttpSession会话=request.getSession ();//从请求中获得的URI(统一资源标识符)   字符串uri=request.getRequestURI ();   system . out。println(“你好:”+ uri);   最后一个int宽度=180;//图片宽度   最后一个int高度=40;//图片高度   最终字符串imgType=癹peg”;//指定图片格式(不是指MIME类型)   最后OutputStream输出=response.getOutputStream ();//获得可以向客户端返回图片的输出流//(字节流)//创建验证码图片并返回图片上的字符串   代码=GraphicHelper字符串。创建(宽度、高度、imgType、输出);   system . out。println(“验证码内容:“+代码);//建立uri和相应的验证码的关联(存储到当前会话对象的属性中)   会话。setAttribute (uri,代码);   System.out.println (session.getAttribute (uri));   }   }   & lt;/span>      

接着写一个HTML注册页面用来检验一下:

        & lt;跨度祝辞& lt; !DOCTYPE html>   & lt; html>   & lt; head>   & lt;元charset=皍tf - 8”比;   & lt; title>注册& lt;/title>   & lt;链接rel="样式表" href=" https://www.yisu.com/zixun/styles/general.css " rel=巴獠縩ofollow”比;   & lt;链接rel="样式表" href=" https://www.yisu.com/zixun/styles/cell.css " rel=巴獠縩ofollow”比;   & lt;链接rel="样式表" href=" https://www.yisu.com/zixun/styles/form.css " rel=巴獠縩ofollow”比;   & lt;脚本type=" text/javascript " src=" https://www.yisu.com/zixun/js/ref.js "祝辞& lt;/script>   & lt;风格类型=" text/css "比;   .logo-container {   margin-top: 50 px;   }   .logo-container img {   宽度:100 px;   }   .message-container {   身高:80 px;   }   .link-container {   高度:40像素;   行高:40像素;   }   .link-container一个{   文字修饰:没有;   }   & lt;/style>   & lt;/head>   & lt; body>   & lt; div类=叭萜鱢orm-container”比;   & lt;行动="/wendao/regist形式。做”方法=" post "比;   & lt; div类="形式"比;& lt; !——注册表单开始——比;   & lt; div类=癴orm-row”比;   & lt;跨类=暗绯?”比;   & lt;我类=" fa fa-user "祝辞& lt;/i>   & lt;/span>   & lt;跨类=癱ell-11”比;   & lt;输入类型="文本" name="用户名"占位符=扒胧淙胗没痹?   & lt;/span>   & lt;/div>   & lt; div类=癴orm-row”比;   & lt;跨类=暗绯?”比;   & lt;我类=" fa fa-key "祝辞& lt;/i>   & lt;/span>   & lt;跨类=癱ell-11”比;   & lt;输入类型="密码" name="密码"占位符=扒胧淙朊苈搿北?   & lt;/span>   & lt;/div>   & lt; div类=癴orm-row”比;   & lt;跨类=暗绯?”比;   & lt;我类=" fa fa-keyboard-o "祝辞& lt;/i>   & lt;/span>   & lt;跨类=癱ell-11”比;   & lt;输入类型="密码" name="确认"占位符=扒肴啡厦苈搿北?   & lt;/span>   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Java实现验证码验证功能