kaptcha实现验证码_Google reCAPTCHA 验证码

kaptcha实现验证码_Google reCAPTCHA 验证码使用kaptcha生成验证码

大家好,又见面了,我是你们的朋友全栈君。

 kaptcha是一个简单好用的验证码生成工具,通过配置,可以自己定义验证码大小、颜色、显示的字符等等。下面就来讲一下如何使用kaptcha生成验证码以及在服务器端取出验证码进行校验。

一、搭建测试环境

1.1、创建Web测试项目

  新建一个Web项目,并将kaptcha-2.3.2.jar放在项目的WEB-INF/lib目录下,如下图所示:

  

1.2、在web.xml文件配置生成验证码的KaptchaServlet

  KaptchaServlet的详细配置如下:

复制代码
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app version="2.5" 
 3  xmlns="http://java.sun.com/xml/ns/javaee" 
 4  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 5  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  6  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 7   <welcome-file-list>
 8     <welcome-file>index.jsp</welcome-file>
 9   </welcome-file-list>
10   
11    <!-- kaptcha验证码配置 -->
12     <servlet>
13         <!-- 生成图片的Servlet -->
14         <servlet-name>Kaptcha</servlet-name>
15         <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
16         
17         <!-- 是否有边框-->
18         <init-param>
19             <param-name>kaptcha.border</param-name>
20             <param-value>no</param-value>
21         </init-param>    
22         <!-- 字体颜色 -->
23         <init-param>
24             <param-name>kaptcha.textproducer.font.color</param-name>
25             <param-value>red</param-value>
26         </init-param>
27         <!-- 图片宽度 -->
28         <init-param>
29             <param-name>kaptcha.image.width</param-name>
30             <param-value>135</param-value>
31         </init-param>
32         <!-- 使用哪些字符生成验证码 -->
33         <init-param>
34             <param-name>kaptcha.textproducer.char.string</param-name>
35             <param-value>ACDEFHKPRSTWX345679</param-value>
36         </init-param>
37         <!-- 图片高度 -->
38         <init-param>
39             <param-name>kaptcha.image.height</param-name>
40             <param-value>50</param-value>
41         </init-param>
42         <!-- 字体大小 -->
43         <init-param>
44             <param-name>kaptcha.textproducer.font.size</param-name>
45             <param-value>43</param-value>
46         </init-param>
47         <!-- 干扰线的颜色 -->
48         <init-param>
49             <param-name>kaptcha.noise.color</param-name>
50             <param-value>black</param-value>
51         </init-param>
52         <!-- 字符个数 -->
53         <init-param>
54             <param-name>kaptcha.textproducer.char.length</param-name>
55             <param-value>4</param-value>
56         </init-param>
57         <!-- 使用哪些字体 -->
58         <init-param>
59             <param-name>kaptcha.textproducer.font.names</param-name>
60             <param-value>Arial</param-value>
61         </init-param>        
62     </servlet>
63     <!-- 映射的url -->
64     <servlet-mapping>
65         <servlet-name>Kaptcha</servlet-name>
66         <url-pattern>/Kaptcha.jpg</url-pattern>
67     </servlet-mapping>
68 </web-app>
复制代码

1.3、显示生成的验证码

  在页面index.jsp显示验证码

复制代码
 1 <%@ page language="java" pageEncoding="UTF-8"%>
 2 <!DOCTYPE HTML>
 3 <html>
 4   <head>
 5     <title>显示KaptchaServlet生成的验证码</title>
 6     <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.9.1.js"></script>
 7     <script type="text/javascript">
 8         //点击切换验证码
 9         function changeVerifyCode(){ 10  $("#yzmImg").attr("src","Kaptcha.jpg?"+Math.floor(Math.random()*100)); 11  } 12         
13         //提交
14         function doSubmit() { 15             var verifyCodeValue = $("#verifyCode").val(); 16             if(verifyCodeValue.replace(/\s/g,"") == "") { 17  alert("请输入验证码"); 18  }else { 19                 //提交前先异步检查验证码是否输入正确
20                 var verifyUrl = "${pageContext.request.contextPath}/servlet/VerifyServlet?verifyCode="+verifyCodeValue; 21  $.ajax({ 22  type:"GET", 23  url:verifyUrl, 24  success:function(returnData){ 25                         if(returnData!="Y") { 26  alert("请输入正确的验证码!"); 27  }else { 28                             //验证码正确,进行提交操作
29  alert("验证码输入正确,提交表单"); 30  } 31  }, 32  error:function(e){ 33  alert(e); 34  } 35  }); 36  } 37  } 38     </script>
39   </head>
40   
41   <body>
42        <form>
43         <table>
44             <tr>
45                 <td>    
46  请输入验证码: 47                 </td>
48                 <td>
49                     <input type="text" name="verifyCode" id="verifyCode">
50                     <img src="Kaptcha.jpg" onclick="changeVerifyCode()" id="yzmImg" style="cursor: pointer;">
51                     <a href="javascript:void(0)" onclick="changeVerifyCode()">看不清,换一张</a>
52                 </td>
53             </tr>
54             <tr>
55                 <td>    
56                     &nbsp;
57                 </td>
58                 <td>
59                     <input type="button" value="提交" onclick="doSubmit()">
60                 </td>
61             </tr>
62         </table>
63     </form>    
64   </body>
65 </html>
复制代码

  运行效果如下图所示:

  

1.4、在服务器端验证提交的验证码

  用户在form表单中提交了验证码之后,我们会在服务器端进行验证,编写一个VerifyServlet,代码如下:

复制代码
 1 /**
 2  *  3  */
 4 package me.gacl.web.controller;  5 
 6 import java.io.IOException;  7 import java.io.PrintWriter;  8 
 9 import javax.servlet.ServletException; 10 import javax.servlet.http.HttpServlet; 11 import javax.servlet.http.HttpServletRequest; 12 import javax.servlet.http.HttpServletResponse; 13 
14 public class VerifyServlet extends HttpServlet { 15 
16     
17     public void doGet(HttpServletRequest request, HttpServletResponse response) 18             throws ServletException, IOException { 19 
20         response.setContentType("text/html;charaset=utf-8"); 21         response.setHeader("pragma", "no-cache"); 22         response.setHeader("cache-control", "no-cache"); 23         PrintWriter out = null; 24         try { 25             //响应数据
26  String resultData; 27             //获取传过来的验证码
28             String verifyCode = request.getParameter("verifyCode"); 29             System.out.println("verifyCode----"+verifyCode); 30             if(verifyCode=="") { 31                 resultData = "N"; 32             }else { 33                 //获取kaptcha生成存放在session中的验证码
34                 String kaptchaValue = (String) request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY); 35                 //比较输入的验证码和实际生成的验证码是否相同
36                 if(kaptchaValue == null || kaptchaValue == ""||!verifyCode.equalsIgnoreCase(kaptchaValue)) { 37                     resultData = "N"; 38                 }else { 39                     resultData = "Y"; 40  } 41  } 42             out = response.getWriter(); 43  out.write(resultData); 44  out.flush(); 45         }catch(Exception e) { 46  e.printStackTrace(); 47         }finally { 48             if(out != null) { 49  out.close(); 50  } 51  } 52  } 53 }
复制代码

  在web.xml中注册VerifyServlet

复制代码
1 <!-- 检查验证码是否输入正确 -->
2     <servlet>
3         <servlet-name>VerifyServlet</servlet-name>
4         <servlet-class>me.gacl.web.controller.VerifyServlet</servlet-class>
5     </servlet>
6     <servlet-mapping>
7         <servlet-name>VerifyServlet</servlet-name>
8         <url-pattern>/servlet/VerifyServlet</url-pattern>
9     </servlet-mapping>
复制代码

  运行结果如下:

  1、验证码不输入

  

  2、输入错误的验证码

  

  3、输入正确的验证码

  

  使用kaptcha生成验证码感觉挺不错的,非常好用和方便。

转载于:https://my.oschina.net/zhanghaiyang/blog/596122

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106767.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何用python刷屏(如何用python打开qq)

    python实现QQ和微信刷屏看过一些用来刷屏的程序,要么就只能刷屏QQ,要么就只能刷屏微信,今天博主就来把它一起实现了,而且用法超简单的哦!!!,希望可以帮助到你!废话不多说,先上代码,然后再进行详细介绍!!!frompynputimportmouse,keyboardfromtkinterimport*importtkinter.filedialogimporttimeroot=Tk()root.title(“信息刷屏”)root.geometry(“550×200

    2022年4月10日
    52
  • 超详细的Git下载安装、环境变量配置教程

    超详细的Git下载安装、环境变量配置教程一、安装教程:1.首先去官网下载git安装包,附网址:https://git-scm.com/官网下载会比较慢,附上csdn下载链接:2.点击下载好的exe文件3.一直点击next,直到出现install,点击install,安装完成后点击finish:4.启动测试  到此,Git的安装完成,可以在开始菜单中看到Git的三个启动图标(GitBash、GitCMD(Deprecated)、GitGUI)。  GitBash

    2022年5月20日
    57
  • PS学习总结三:修图必备的高阶操作

    PS学习总结三:修图必备的高阶操作目录一:滤镜二:滤镜下的一些操作三:智能对象四:通道五:通道抠图步骤六:裁剪工具七:修复工具八:仿制图章九:内容识别十:操作变形一:滤镜ps滤镜:主要通过各种命令来实现图像的各种特殊效果。智能滤镜优点:可编辑性强 有自带的蒙版,可以对局部进行处理 双击滤镜名称,修改滤镜参数 一个图层上可以添加多个滤镜效果cameraraw滤镜打开单反相机源文件格式cr2,那么回自动使用cameraraw滤镜打开。是摄影师后期专业的调色插件,他

    2022年6月16日
    31
  • 全面了解制作滚动字幕完全手册

    全面了解制作滚动字幕完全手册

    2021年8月5日
    54
  • mysql 查看函数fsync_fsync()函数 Unix/Linux「建议收藏」

    mysql 查看函数fsync_fsync()函数 Unix/Linux「建议收藏」fsync,fdatasync-同步文件在内核态与存储设备内容简介#includeintfsync(intfd);intfdatasync(intfd);描述fsync()transfers(“flushes”)allmodifiedin-coredataof(i.e.,modifiedbuffercachepagesfor)thefilereferre…

    2022年5月18日
    46
  • potplayermadvr设置_potplayerhdr设置

    potplayermadvr设置_potplayerhdr设置Potplayer+LAV+madVR+Xysubfilter配置指南Potplayer作为Windows上很受欢迎的一款播放器,公认的最佳配置为结合LAV、madVR、XySubfilter进行使用。本文将介绍一种对其简单配置的方法。LAV:一套主流的开源解码filtermadVR:一个高性能的视频渲染器XySubfilter:madVR专用的字幕插件关于如何设置…

    2022年9月14日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号