`
mengqingyu
  • 浏览: 329178 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

验证码配置方法

阅读更多
1.在web.xml下配置2个servlet,VerifyCodeServlet用来生成验证码图像,
ResultServlet用来做服务器端验证。
	<servlet>
		<servlet-name>VerifyCodeServlet</servlet-name>
		<servlet-class>VerifyCodeServlet</servlet-class>
	</servlet>
	<servlet>
		<servlet-name>ResultServlet</servlet-name>
		<servlet-class>ResultServlet</servlet-class>
	</servlet>
 	<servlet-mapping>
		<servlet-name>VerifyCodeServlet</servlet-name>
		<url-pattern>/verifyCodeServlet</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>ResultServlet</servlet-name>
		<url-pattern>/resultServlet</url-pattern>
	</servlet-mapping>

2.servlet类文件
import java.awt.Color;   
import java.awt.Font;   
import java.awt.Graphics2D;   
import java.awt.image.BufferedImage;   
import java.util.Random;   
  
import javax.imageio.ImageIO;   
import javax.servlet.ServletException;   
import javax.servlet.ServletOutputStream;   
import javax.servlet.http.HttpServlet;   
import javax.servlet.http.HttpServletRequest;   
import javax.servlet.http.HttpServletResponse;   
import javax.servlet.http.HttpSession;   

public class VerifyCodeServlet extends HttpServlet {   
  
    
    /**
    * 验证码图片的宽度。 
    */
    private int width = 70;   
    
    /**
    *  验证码图片的高度。
    */
    private int height = 20;   
  
 
    /**
    * 验证码字符个数 
    */
    private int codeCount = 4;   
  
    /**
    * xx
    */
    private int xx = 0;   
  
    /**
    * 字体高度   
    */
    private int fontHeight;   
  
    /**
    * codeY
    */
    private int codeY;   
  
    /**
    * codeSequence
    */
    char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',   
            'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',   
            'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };   
  
    /**  
     * 初始化验证图片属性  
     */  
    public void init() throws ServletException {   
        // 从web.xml中获取初始信息   
        // 宽度   
        String strWidth = this.getInitParameter("width");   
        // 高度   
        String strHeight = this.getInitParameter("height");   
        // 字符个数   
        String strCodeCount = this.getInitParameter("codeCount");   
  
        // 将配置的信息转换成数值   
        try {   
            if (strWidth != null && strWidth.length() != 0) {   
                width = Integer.parseInt(strWidth);   
            }   
            if (strHeight != null && strHeight.length() != 0) {   
                height = Integer.parseInt(strHeight);   
            }   
            if (strCodeCount != null && strCodeCount.length() != 0) {   
                codeCount = Integer.parseInt(strCodeCount);   
            }   
        } catch (NumberFormatException e) {
         e.printStackTrace();
        }   
  
        xx = width / (codeCount + 1);   
        fontHeight = height - 2;   
        codeY = height - 4;   
  
    }   
  
    /**
    * @param req
    * @param resp
    * @throws ServletException
    * @throws java.io.IOException
    */
    protected void service(HttpServletRequest req, HttpServletResponse resp)   
            throws ServletException, java.io.IOException {   
  
        // 定义图像buffer   
        BufferedImage buffImg = new BufferedImage(width, height,   
                BufferedImage.TYPE_INT_RGB);   
        Graphics2D gd = buffImg.createGraphics();   
  
        // 创建一个随机数生成器类   
        Random random = new Random();   
  
        // 将图像填充为白色   
        gd.setColor(Color.WHITE);   
        gd.fillRect(0, 0, width, height);   
  
        // 创建字体,字体的大小应该根据图片的高度来定。   
        Font font = new Font("Fixedsys", Font.PLAIN, fontHeight);   
        // 设置字体。   
        gd.setFont(font);   
  
        // 画边框。   
        gd.setColor(Color.BLACK);   
        gd.drawRect(0, 0, width - 1, height - 1);   
  
        // 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。
        
        gd.setColor(Color.lightGray);   
        for (int i = 0; i < 16; i++) {   
            int x = random.nextInt(width);   
            int y = random.nextInt(height);   
            int xl = random.nextInt(12);   
            int yl = random.nextInt(12);   
            gd.drawLine(x, y, x + xl, y + yl);   
        }   
  
        // randomCode用于保存随机产生的验证码,以便用户登录后进行验证。   
        StringBuffer randomCode = new StringBuffer();   
        int red = 0, green = 0, blue = 0;   
  
        // 随机产生codeCount数字的验证码。   
        for (int i = 0; i < codeCount; i++) {   
            // 得到随机产生的验证码数字。   
            String strRand = String.valueOf(codeSequence[random.nextInt(36)]);   
            // 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。   
            red = random.nextInt(255);   
            green = random.nextInt(255);   
            blue = random.nextInt(255);   
  
            // 用随机产生的颜色将验证码绘制到图像中。   
            gd.setColor(new Color(red, green, blue));   
            gd.drawString(strRand, (i + 1) * xx, codeY);   
  
            // 将产生的四个随机数组合在一起。   
            randomCode.append(strRand);   
        }   
        // 将四位数字的验证码保存到Session中。   
        HttpSession session = req.getSession();   
        session.setAttribute("validateCode", randomCode.toString());   
  
        // 禁止图像缓存。   
        resp.setHeader("Pragma", "no-cache");   
        resp.setHeader("Cache-Control", "no-cache");   
        resp.setDateHeader("Expires", 0);   
  
        resp.setContentType("image/jpeg");   
  
        // 将图像输出到Servlet输出流中。   
        ServletOutputStream sos = resp.getOutputStream();   
        ImageIO.write(buffImg, "jpeg", sos);   
        sos.close();   
    }   
  
} 


import java.io.IOException;   
import java.io.PrintWriter;   
  
import javax.servlet.ServletException;   
import javax.servlet.http.HttpServlet;   
import javax.servlet.http.HttpServletRequest;   
import javax.servlet.http.HttpServletResponse;   
  
public class ResultServlet extends HttpServlet {   
  
    public void doGet(HttpServletRequest request, HttpServletResponse response)   
            throws ServletException, IOException {   
  
        doPost(request, response);   
    }   
  
    public void doPost(HttpServletRequest request, HttpServletResponse response)   
            throws ServletException, IOException {   
  
        response.setContentType("text/html;charset=utf-8");   
        String validateC = (String) request.getSession().getAttribute("validateCode");   
        String veryCode = request.getParameter("code");   
        PrintWriter out = response.getWriter();         
        veryCode = veryCode.toUpperCase();
        if(veryCode==null||"".equals(veryCode)){   
        	out.print("false");
        }else{   
            if(validateC.equals(veryCode)){   
            	out.print("true");
            }else{   
            	out.print("false");
            }   
        }   
        out.flush();   
        out.close();   
    }   
  
}  

3.jsp页面显示
<input type="text" id="checkCode" name="checkCode" class="s_td"/><img id="imgObj" alt="" src="<c:url value='/verifyCodeServlet'/>" style="vertical-align:top;margin-top:1px;margin-left:5px;"/>&nbsp;&nbsp;  
			        <a href="javascript:void(0);" onclick="changeImg();return false;">看不清,换一张</a> <span id="error"></span> 

4.ajax验证
		//------改变验证码内容------		
		function changeImg(){   
		    var imgSrc = $("#imgObj");   
		  	imgSrc.attr("src",chgUrl("<c:url value='/verifyCodeServlet'/>")); 
		  	$("#checkCode").focus();  
		}	
		//时间戳   
		//为了使每次生成图片不一致,即不让浏览器读缓存,所以需要加上时间戳   
		function chgUrl(url){   
		    var timestamp = (new Date()).valueOf();   
		    if((url.indexOf("&")>=0)){   
		        url = url + "&tamp=" + timestamp;   
		    }else{   
		        url = url + "?timestamp=" + timestamp;   
		    }   
		    return url;   
		}
		//判断输入的验证码是否正确
		function isRightCode(){   
		    var res = "false";
		    var code = $("#checkCode").attr("value");   
		    code = "data="+new Date()+"&code=" + code; 
		    $.ajax({
		        type:"POST",   
		        url:"<c:url value='/resultServlet'/>",   
		        data:code,   
		        //同步
		        async:false,
		        success:function(data){
		        res=data;
		        }
		    });
		    return res;
		}
分享到:
评论

相关推荐

    验证码不能显示解决方法

    注册表的值。有时候打开网页时,验证码显示不了,可能是电脑里的配置需要改动。。。

    Java 算术验证码图片

    Java产生简单算术验证码图片,此为Servlet需要配置web.xml,配置方法如下: &lt;servlet-name&gt;authimg &lt;servlet-class&gt;img.AuthImg &lt;servlet-name&gt;authimg &lt;url-pattern&gt;/authimg.img ...

    Laravel 集成 Geetest验证码的方法

    根据 官方Demo 配置我们的控制器和路由 根据 官方Demo 配置我们的登录模板 测试 Geetest 集成详细过程 1、实现登录的大致逻辑 创建控制器 php artisan make:controller GeetestController 编辑控制器 /app/...

    thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法

    1、配置文件中增加验证码配置 'captcha' =&gt; [ // 验证码字符集合 'codeSet' =&gt; '23456789', // 验证码字体大小(px) 'fontSize' =&gt; 25, // 是否画混淆曲线 'useCurve' =&gt; false, // 验证码位数 'length' =&gt; ...

    java web 登录验证码生成类

    java类中获得验证码的方法: session.getAttribute("checkcode"); jsp页面中显示图片的方式: ${pageContext.request.contextPath}/checkcode.jsp"/&gt; 另外在web.xml中配置验证码类的加载: &lt;servlet-name&gt;...

    ThinkPHP实现生成和校验验证码功能

    使用ThinkPHP实现生成/校验验证码功能,供大家参考,具体内容如下 ...1:check() 校验验证码是否正确 2:entry()输出验证码并把验证码的值保存的... //验证码配置 $cfg = array( 'imageH' =&gt; 30, // 验证码图片高度 '

    captcha:一个好用的开源验证码项目,项目包括字符验证码,运算验证码以及滑动验证码功能的集成

    如果需要更改和自定义运算方法请移步: config.selfimpr.captcha-&gt;配置-&gt; CaptchaConfig-&gt; getKaptchaBeanMath() 滑动验证码:需要将自己的验证码图片配置到application.yml文件路径中。相关的验证码图片和模板在...

    Java使用SSM框架实现登录页面的验证码功能

    ssm框架实现验证码登录,不需要配置jar包,不需要配置springMVC文件,直接在前台配置标签和JavaScript,然后在controller中配置三个方法,资料齐全

    Spring MVC中使用Google kaptcha验证码的方法详解

    kaptcha 是一个非常实用的...有了它,你可以生成各种样式的验证码,因为它是可配置的,下面这篇文章主要给大家介绍了关于Spring MVC中使用Google kaptcha验证码的方法,需要的朋友可以参考借鉴,下面来一起看看吧。

    验证码的识别.zip

    基于python的selenium验证码识别方法,内附详细的测试代码和测试图片,亲测可以实现。可以用于selenium自动化测试,内涵安装和配置的方法。

    微信小程序接入腾讯云验证码的方法步骤

    前言:最近做了一个小程序抽奖的活动,出现了部分用户恶意薅羊毛...验证码接入前,需要先在验证码控制台中注册 AppID 和 AppSecret,注册完成后,您可以在控制台的基础配置中查看 AppID (下文extraData中使用) 以及 App

    PHP登录验证码的实现与使用方法

    本文实例讲述了PHP登录验证码的实现与使用方法。分享给大家供大家参考,具体如下: 1. 新建code.php验证码生成文件 在此之前必须打开php的GD库,修改php.ini文件的配置,取消extension=php_gd2.dll前面的分号。代码...

    SimpleMvcCaptcha验证码 v1.2源码2012519

    ASP.NET MVC 3简单算数表达式生成验证码,使用 HtmlHelper扩展方法。没有使用WCF等。使用C#编写。 关键特性: 验证码为简单的数学运算 随机替换预先定义的文本(+为plus,-为minus) 文本颜色随机改变 代码中没有开放...

    StupidOCR开源验证码识别

    应用于爬虫,注册,登录等场景的验证码识别 ...快速 便捷 通用的方法提供用户调用,堪称作者开发神器 项目说明: Python开发, 用于验证码识别,秉承着会HttpPost协议即可调用的原则! 支持部署 本地 和 服务器 .

    图文验证码模块

    本程序共提供了三种图文验证方法,第1种是英文、数字和中文混合的彩色验证码,如图1.1所示。第2种是Ajax实现无刷新的彩色验证码,如图1.2所示。第3种是加密的验证码,如图1.3所示。 登录用户名和密码统一为mr,...

    Happy Captcha简易验证码-其他

    Happy Captcha简易验证码安装:如果你的项目使用的是Maven进行依赖管理,你只需向pom.xml文件添加下面的配置即可: com.ramostear Happy-Captcha 1.0.1 Gradle用户则可以通过引入如下的配置获取Happy Captcha:...

    thinkPHP显示不出验证码的原因与解决方法分析

    主要介绍了thinkPHP显示不出验证码的原因与解决方法,结合具体实例形式分析了thinkPHP关于验证码显示的相关配置方法与注意事项,需要的朋友可以参考下

    C#调用阿里云短信,腾讯云短信,上海八悠短信平台发送验证码

    添加TopSdk.dll,SMS.DLL引用 声明 using SMS; 调用 sms.send();//1成功0失败 ...添加配置文件 &lt;!--短信配置--&gt; &lt;!--使用那种平台(ali是阿里,sh是用上海,qq是QQ云)--&gt; &lt;add key="pingtai" value="sh"/&gt;

    python生成验证码图片代码分享

    除了配置好的python环境外,还需要配有python中的PIL库,这是python中专门用来处理图片的库。用传统的pip install 方法或者下载源码 python setup.py install 方法安装该库,很可能会报错(视运行环境不同)。可以...

Global site tag (gtag.js) - Google Analytics