kaptcha 验证码使用

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/49800115 未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys

1,关于

验证码是做互联网必须做的。
目前都是用的第三方库。Kaptcha已经迁移到github项目了。
参考博客:http://www.v5cn.cn/?p=157

2,项目中使用Kaptcha

引入pom

<dependency>
    <groupId>com.github.axet</groupId>
    <artifactId>kaptcha</artifactId>
    <version>0.0.9</version>
</dependency>
<!-- kaptcha依赖-->
<dependency>
    <groupId>com.jhlabs</groupId>
    <artifactId>imaging</artifactId>
    <version>01012005</version>
</dependency>

默认Kaptcha使用的是servlet,找到servlet迁移到 srping mvc。

controller代码:

import com.google.code.kaptcha.Producer;
import com.google.code.kaptcha.util.Config;
import com.octo.captcha.service.CaptchaServiceException;
import com.octo.captcha.service.image.ImageCaptchaService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.Properties;
import com.google.code.kaptcha.Constants;

@Controller
@RequestMapping(value = "/demo", method = {RequestMethod.GET})
public class KcaptchaController {

    public static final String CAPTCHA_IMAGE_FORMAT = "jpeg";

    //--kapcha验证码。
    private Properties props = new Properties();
    private Producer kaptchaProducer = null;
    private String sessionKeyValue = null;
    private String sessionKeyDateValue = null;

    public KcaptchaController() {
        ImageIO.setUseCache(false);

        //设置宽和高。
        this.props.put(Constants.KAPTCHA_IMAGE_WIDTH, "200");
        this.props.put(Constants.KAPTCHA_IMAGE_HEIGHT, "60");
        //kaptcha.border:是否显示边框。
        this.props.put(Constants.KAPTCHA_BORDER, "no");
        //kaptcha.textproducer.font.color:字体颜色
        this.props.put(Constants.KAPTCHA_TEXTPRODUCER_FONT_COLOR, "black");
        //kaptcha.textproducer.char.space:字符间距
        this.props.put(Constants.KAPTCHA_TEXTPRODUCER_CHAR_SPACE, "5");
        //设置字体。
        this.props.put(Constants.KAPTCHA_TEXTPRODUCER_FONT_SIZE, "40");
        //this.props.put(Constants.KAPTCHA_NOISE_COLOR, "");
        //更多的属性设置可以在com.google.code.kaptcha.Constants类中找到。

        Config config1 = new Config(this.props);
        this.kaptchaProducer = config1.getProducerImpl();
        this.sessionKeyValue = config1.getSessionKey();
        this.sessionKeyDateValue = config1.getSessionDate();
    }

    @RequestMapping(value = "/kcaptcha.jpg", method = {RequestMethod.GET})
    @ResponseBody
    public void kaptcha(@RequestParam(value = "code", defaultValue = "0") String code,
                        HttpServletResponse response, HttpServletRequest request,
                        Model view) throws IOException {
        // flush it in the response
        response.setHeader("Cache-Control", "no-store");
        response.setHeader("Pragma", "no-cache");
        response.setDateHeader("Expires", 0);
        response.setContentType("image/" + CAPTCHA_IMAGE_FORMAT);

        String capText = this.kaptchaProducer.createText();
        BufferedImage bi = this.kaptchaProducer.createImage(capText);
        ServletOutputStream out = response.getOutputStream();
        try {
            request.getSession().setAttribute(this.sessionKeyValue, capText);
            request.getSession().setAttribute(this.sessionKeyDateValue, new Date());
        } catch (Exception e) {
            e.printStackTrace();
        }
        ImageIO.write(bi, CAPTCHA_IMAGE_FORMAT, out);

    }
}

其中还有一个问题,必须在ImageIO关闭之前将数据写到session里面。否则报错。

参数配置都在 com.google.code.kaptcha.Constants 类里面。
只要设定下就可以了。而且可以对规则进行自己的实现。

显示效果如下:

3,总结

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/49800115 未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys

Kaptcha感觉上臂Japtcha好用点,另外一个配置文件太多,配置起来比较复杂。没有使用。
代码不多,可以学习下。

时间: 2024-09-22 22:22:40

kaptcha 验证码使用的相关文章

javaWeb使用Kaptcha组件生成验证码_java

javaWeb之使用Kaptcha组件使用验证码   web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="h

java下使用kaptcha生成验证码_java

kaptcha是一个简单好用的验证码生成工具,通过配置,可以自己定义验证码大小.颜色.显示的字符等等.下面就来讲一下如何使用kaptcha生成验证码以及在服务器端取出验证码进行校验. 一.搭建测试环境 1.1.创建Web测试项目 新建一个Web项目,并将kaptcha-2.3.2.jar放在项目的WEB-INF/lib目录下,如下图所示: 1.2.在web.xml文件配置生成验证码的KaptchaServlet KaptchaServlet的详细配置如下: <?xml version="1

jsp spring mvc 框架集成google kaptcha生成验证码实例教程

关于kaptcha介绍,我们就不说了,网上一堆的资料. 使用kaptcha可以方便的配置:    验证码的字体    验证码字体的大小    验证码字体的字体颜色    验证码内容的范围(数字,字母,中文汉字!)    验证码图片的大小,边框,边框粗细,边框颜色    验证码的干扰线(可以自己继承com.google.code.kaptcha.NoiseProducer写一个自定义的干扰线)    验证码的样式(鱼眼样式.3D.普通模糊--当然也可以继承com.google.code.kaptc

java验证码组件kaptcha使用方法_java

使用方法: 项目中导入kaptcha-2.3.jar包在web.xml里面新增:  复制代码 代码如下: <!-- 登陆验证码Kaptcha -->    <servlet>        <servlet-name>Kaptcha</servlet-name>        <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>   

jsp 用 kaptcha 插件生成数字运算图形验证码

1.从官网https://code.google.com/p/kaptcha/下载kaptcha压缩文件,解压文件后里面有一个war文件,打开Eclipse/MyEclipse将其import进去,然后部署到服务器,在浏览器输入url即可看到kaptcha官方提供的基本demo的运行情况,现在将其改为加法计算验证. 2.首先查看web.xml文件发现用来生成验证码的servlet为KaptchaServlet 3.找到KaptchaServlet.class文件,然后进行反编译. 4.新建一个自

网页登陆、注册中的验证码

问题描述 网页登陆.注册中的验证码 往往网页的登录和注册都需要输入验证码,验证码是怎么做出来的, 我个人认为是自己用PHOTOSHOP做,然后用SEVLET检验图片名字和用户输入是否匹配 ? 解决方案 在程序中画出来,用随机的颜色,随机位移,随机进行几何变换以及添加随机的线条.点等. 解决方案二: 用photoshop做你能做多少个?做1000个?黑客把所有的验证码都下载下来,人工识别了,然后存入数据库,对照查表,那你的验证码还有什么意义. 解决方案三: 随机产生几个数字和字母,生成一张图片传到

探讨Java验证码制作(下篇)_java

接着上篇java验证码制作(上篇)给大家介绍有关java验证码的相关知识! 方法三: 用开源组件Jcaptcha实现,与Spring组合使用可产生多种形式的验证码,JCaptcha 即为Java版本的 CAPTCHA 项目,其是一个开源项目,支持生成图形和声音版的验证码,在生成声音版的验证码时,需要使用到 FreeTTS.而CAPTCHA 全称 Completely Automated Public Turing Test to Tell Computers and Humans Apart,最

使用开源工具制作网页验证码的方法_javascript技巧

开发工具:eclipse.kaptcha-2.3.jar包. 一.创建Web项目: 二.新建一个Jsp页面(内容有,一个文本框,一个图片容器,一个提交按钮) <body> <img alt="random" src="randomcode.jpg" onclick="changeR(this)" style="cursor: pointer;"> <form action="check.

PHP实现变色验证码实例

 验证码想必大家都有见到过吧,在本文为大家介绍下PHP如何实现变色验证码,感兴趣的朋友可以参考下 代码如下: <?php  header("Content-type: image/png,charset='utf-8'");  $im = imagecreatetruecolor(400, 30);  //白色  $white = imagecolorallocate($im, 255, 255, 255);  //红色  $red = imagecolorallocate($i