java开发2--验证码

本文详细介绍了验证码的工作原理,并通过Kaptcha插件的使用实例,展示了验证码的生成、配置及验证过程。重点突出了验证码生成器的配置步骤,包括边框设置、字体颜色、字符间距和字体大小等关键参数。此外,还提供了前端获取验证码图片的方法和后端检查验证码输入正确的逻辑。最后,附上了获取验证码图片的JavaScript函数和检查验证码是否正确的Java代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、验证码原理
(1)向后台发送请求,后台服务器生成一个随机数,利用这个随机数映射一张图片,最后将这张图片返回客户端;
(2)后台生成验证码字符串时,同时将这个字符串保存起来,当用户提交验证码时检测填写的验证码是否和这个随机数相同。

关于验证码,重要的有三点,这三点处理不好都可能被破解者利用。一是随机数的生成,二是随机数和图片的映射,三是随机数如何保存。
网上有很多种验证码插件,下面主要以google的验证码插件kaptcha为例进行讲解。

二、验证码示例

1.首先去官网下载jar:http://code.google.com/p/kaptcha/

2.建立一个web项目,导入kaptcha-2.3.jar到环境变量中。

3.在web.xml文件里配置验证码生成器

<!-- 验证码生成器 -->
    <servlet>
        <servlet-name>yzm</servlet-name>
        <servlet-class>
            com.google.code.kaptcha.servlet.KaptchaServlet
        </servlet-class>
        <init-param>
            <param-name>kaptcha.border</param-name>
            <param-value>no</param-value>
        </init-param>
        <init-param>
            <param-name>kaptcha.textproducer.font.color</param-name>
            <param-value>black</param-value>
        </init-param>
        <init-param>
            <param-name>kaptcha.textproducer.char.space</param-name>
            <param-value>5</param-value>
        </init-param>
        <init-param>
            <param-name>kaptcha.textproducer.font.size</param-name>
            <param-value>40</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>yzm</servlet-name>
        <url-pattern>/yzm.jpg</url-pattern>
    </servlet-mapping>

4.前台发送“获取验证码”请求

 <!-- 验证码图片 -->
 <span class="sp_img">
     <img id="yzmImg" width="70px" height="25px" />
 </span> 

 /**
 * 获得验证码图片
 */
var yzm_num = 0;
function getYzmFromZsfy(){
    var yzmImg = document.getElementById("yzmImg");
    yzmImg.src = ctx + "/yzm.jpg?n=" + (yzm_num++);
}

5.后台检查验证码是否输入正确

HttpSession session = request.getSession(false);
if (session != null) {
      String captchaKey = (String) session.getAttribute(Constants.KAPTCHA_SESSION_KEY);
      Date captchaTime = (Date) session.getAttribute(Constants.KAPTCHA_SESSION_DATE);
      // 删除旧的验证码   
      session.removeAttribute(Constants.KAPTCHA_SESSION_KEY);
      session.removeAttribute(Constants.KAPTCHA_SESSION_DATE);
 }

  if (StringUtils.isBlank(captchaKey) || create == null) {
       throw new CaptchaException("验证码已过期");
  }
  String captchaInput = request.getParameter("yzm");
  if (!captchaKey.equalsIgnoreCase(captchaInput) {
        throw new CaptchaException("验证码错误");
  }

验证码的使用,可参考以下链接:
http://www.open-open.com/lib/view/open1407057699179.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值