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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 【转载】聊一聊C#的Equals()和GetHashCode()方法

    【转载】聊一聊C#的Equals()和GetHashCode()方法

    2021年11月21日
  • 它们的定义UIAlertView

    它们的定义UIAlertView

  • 面试之ActiveMQ

    面试之ActiveMQ面试之ActiveMQ

  • 此工作站和主域间的信任失败原因_电脑域改为工作组后无法登录

    此工作站和主域间的信任失败原因_电脑域改为工作组后无法登录Thedirectoryserverfailedtoautomaticallyupdateserviceaccount,dnsnameand/orportinformation.这个错误通常是由于访问的主机不能再确保可以和当前加入的活动目录域进行安全通信造成的。当前主机的私有安全凭据和域控制器中的值不匹配。当然简单的可以把安全凭据理解为密码,实际上你知道域环境通过非常严格Kerberos验证,因此实际是Kerberos的Keytable的加密存储在本地安全授权子系统中;

    2022年10月19日
  • gimp中文版教程_GIMP中详细教程.pdf「建议收藏」

    gimp中文版教程_GIMP中详细教程.pdf「建议收藏」GIMP中详细教程GIMP实用系列教程1文件的打开和存储概述打开GIMP软件其初始界面如下:左边是工具,工具箱中每选择一种工具后,通常在其下部会出现一个与其相配的选项栏一起使用的。因此每选好一种工具,首先要把选项栏中的有关选项根据需要选定以后才开始使用。例如:图中选择了画笔,则画笔的选项栏可以选择其不透明度、画笔的笔尖形状、画笔的大小等选项。右边通常可以放置一个图层对话框,如未出现可以在下拉…

  • AC餐饮指的是什么_餐饮tc和ac的区别

    AC餐饮指的是什么_餐饮tc和ac的区别奶牛们在吃饭方面十分挑剔。每头奶牛都有自己喜欢的食物和饮料,并且不会食用其他不喜欢的食物和饮料。农夫约翰为他的奶牛们做了美味的饭菜,但他忘了对照他们的喜好来检查菜单。虽然他可能无法令所有奶牛满意,但他想给尽可能多的奶牛提供一顿完整的用餐—-既有食物可吃,也有饮料可喝。农夫约翰一共烹制了 F 种食物,并提供了 D 种饮料。约翰共有 N 头奶牛,其中第 i 头奶牛有 Fi 种喜欢的食物以及 Di 种喜欢的饮料。约翰需要给每头奶牛分配一种食物和一种饮料,并使得有吃有喝的奶牛数量尽可能大。每种食物

发表回复

您的电子邮箱地址不会被公开。

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