`

Java 生成好看的验证码

    博客分类:
  • Java
 
阅读更多
http://www.oschina.net/code/snippet_1760858_54871

/Make_img_util
使用 官方jar生成验证图片


      <dependency>
          <groupId>com.github.bingoohuang</groupId>
          <artifactId>patchca</artifactId>
          <version>0.0.1</version>
      </dependency>
 
<servlet>
  <servlet-name>ValidCode</servlet-name>
  <servlet-class>validImg.ValidCode</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>ValidCode</servlet-name>
  <url-pattern>/validImg.jpg</url-pattern>
</servlet-mapping>


package validImg;
 
import java.awt.Color;
import java.io.IOException;
import java.util.Random;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.github.bingoohuang.patchca.color.ColorFactory;
import com.github.bingoohuang.patchca.custom.ConfigurableCaptchaService;
import com.github.bingoohuang.patchca.filter.predefined.CurvesRippleFilterFactory;
import com.github.bingoohuang.patchca.filter.predefined.DiffuseRippleFilterFactory;
import com.github.bingoohuang.patchca.filter.predefined.DoubleRippleFilterFactory;
import com.github.bingoohuang.patchca.filter.predefined.MarbleRippleFilterFactory;
import com.github.bingoohuang.patchca.filter.predefined.WobbleRippleFilterFactory;
import com.github.bingoohuang.patchca.utils.encoder.EncoderHelper;
import com.github.bingoohuang.patchca.word.RandomWordFactory;
 
public class ValidCode extends HttpServlet {
    private static ConfigurableCaptchaService cs = new ConfigurableCaptchaService();
    private static Random random = new Random();
    static {
//        cs.setColorFactory(new SingleColorFactory(new Color(25, 60, 170)));
   
        cs.setColorFactory(new ColorFactory() {
            @Override
            public Color getColor(int x) {
                int[] c = new int[3];
                int i = random.nextInt(c.length);
                for (int fi = 0; fi < c.length; fi++) {
                    if (fi == i) {
                        c[fi] = random.nextInt(71);
                    } else {
                        c[fi] = random.nextInt(256);
                    }
                }
                return new Color(c[0], c[1], c[2]);
            }
        });
        RandomWordFactory wf = new RandomWordFactory();
        wf.setCharacters("23456789abcdefghigkmnpqrstuvwxyzABCDEFGHIGKLMNPQRSTUVWXYZ");
        wf.setMaxLength(4);
        wf.setMinLength(4);
        cs.setWordFactory(wf);
    }
 
 
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        switch (random.nextInt(5)) {
        case 0:
            cs.setFilterFactory(new CurvesRippleFilterFactory(cs
                    .getColorFactory()));
            break;
        case 1:
            cs.setFilterFactory(new MarbleRippleFilterFactory());
            break;
        case 2:
            cs.setFilterFactory(new DoubleRippleFilterFactory());
            break;
        case 3:
            cs.setFilterFactory(new WobbleRippleFilterFactory());
            break;
        case 4:
            cs.setFilterFactory(new DiffuseRippleFilterFactory());
            break;
        }
        HttpSession session = request.getSession(false);
        if (session == null) {
            session = request.getSession();
        }
        setResponseHeaders(response);
        String token = EncoderHelper.getChallangeAndWriteImage(cs, "png",
                response.getOutputStream());
        session.setAttribute("validCode", token);
        System.out.println("当前的SessionID=" + session.getId() + ",验证码= ," + token);
 
    }
 
    protected void setResponseHeaders(HttpServletResponse response) {
        response.setContentType("image/png");
        response.setHeader("Cache-Control", "no-cache, no-store");
        response.setHeader("Pragma", "no-cache");
        long time = System.currentTimeMillis();
        response.setDateHeader("Last-Modified", time);
        response.setDateHeader("Date", time);
        response.setDateHeader("Expires", time);
    }
 
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
    }
 
 
}
分享到:
评论

相关推荐

    java生成图片验证码

    首先,我们来看标题"java生成图片验证码"。这个标题暗示我们将探讨的是在Java环境中生成随机的、可读性较差的文本,并将其转化为图像的过程,以创建一个验证码。验证码通常由字母、数字或两者混合组成,设计的目的...

    java生成随机验证码

    java生成随机验证码, 这是一个demo, eclipse项目,导入eclipse即可

    java 生成图片验证码

    在IT领域,验证码(CAPTCHA)是一...在提供的压缩包文件“图片验证码生成”中,可能包含了实现上述功能的源代码示例,你可以通过学习和理解这些代码,加深对Java生成图片验证码的理解,并根据实际需求进行调整和优化。

    Java生成图片验证码工具类源码

    该工具类使用随机字符生成验证码,并支持自定义验证码长度和字体样式。生成的验证码图片背景透明,线条清晰,可轻松辨认。本源码包含了工具类源码及调用示例,可供开发者参考使用,集成到您的项目中。

    Java生成算数运算中文图片验证码

    源代码可能包括生成验证码的类、处理用户输入的控制器以及相关的配置文件。资源文件可能包含了用于绘制验证码的自定义字体,以显示中文字符。说明文档则详细解释了项目的用途、如何运行和使用示例,帮助开发者快速...

    java 生成彩色验证码

    java 生成彩色验证码的程序,改程序可以极大的帮助你,是你可以自动生成彩色的验证码

    java生成图片的验证码工具类及其使用

    java生成验证码的工具类,这个现在有依赖可以直接引入调用,但这个工具类没有引入依赖,大家也容易看懂代码,理解其含义。也可直接去工具类中调整生成验证码的宽度、高度、颜色、背景颜色、生成的随机数数量、干扰线...

    java生成验证码源码包括彩色验证码

    java生成验证码源码包括彩色验证码 包括jsp生成验证码和彩色验证码

    Java随机生成验证码图片

    Java随机生成验证码图片,适用于web登录验证等。个人觉得很不错~

    java生成的随机验证码

    验证码是网络应用中常见的一种安全机制,用于防止自动...总的来说,Java生成随机验证码的过程涵盖了随机数生成、字符串处理、图像处理等多个编程领域。通过合理的设计和实现,可以创建出既安全又用户友好的验证码系统。

    java生成图形验证码 带详细注释 拷贝即用 兼容linux系统 含字体

    有没有发现最后生成了一串长的base64编码 把这一串编码放到img标签在前面加上"data:image/gif;base64,"是能直接使用的 ;base64,(你的base64编码)"/&gt; 验证码最佳宽高计算公式:字体大小和图片高度相等,图片宽度=...

    java 生成动态gif 验证码

    - **Servlet**:在Servlet中调用工具类的方法,生成验证码并将其保存到服务器的一个临时目录,同时将验证码内容保存在Session中,以供后续验证使用。 - **响应客户端**:Servlet返回生成的GIF图像到客户端,通常...

    java生成验证码的参考资料(中英文验证码)

    总的来说,Java生成验证码是一个结合了数学随机性、图像处理和安全性考量的过程。通过学习和使用`kaptcha`或其他验证码生成库,开发者能够快速地在自己的项目中实现这一功能。同时,理解和实现验证码的生成也能加深...

    java随机生成验证码

    验证码(CAPTCHA)是一种用于验证用户是否为人类的自动化测试技术。...以上就是使用Java生成验证码的基本流程和关键知识点。通过调整各种参数和细节,可以根据实际需求定制出更复杂、更难被机器识别的验证码系统。

    JAVA动态生成验证码的JAVA实现的代码

    在JAVA编程语言中,我们可以实现动态生成验证码的机制,以提供安全的用户验证体验。下面将详细介绍如何在JAVA中实现验证码的生成。 首先,验证码通常由一组随机字符(包括字母、数字)组成,它们被扭曲、旋转或添加...

    java生成验证码demo

    这个"java生成验证码demo"提供了生成自定义验证码图片的方法,包括设置图片尺寸、验证码长度,以及添加各种视觉混淆元素,以增加机器识别的难度。 首先,我们要理解验证码的基本原理。它通常由一组随机生成的字母或...

    Java生成图片验证码

    Java生成图片验证码的过程涉及图像处理、随机数生成以及字符串编码等多个知识点。 首先,验证码的核心是生成一个随机的字符串,通常包含字母和数字。在Java中,可以使用`Random`类配合字符数组来生成这种字符串。...

    java生成验图片验证码

    6. **保存和输出**:生成验证码图像后,需要将其保存为JPEG或PNG等格式,以便在Web应用中显示。`ImageIO.write()`方法可以将`BufferedImage`对象写入到输出流中。 7. **服务器端验证**:当用户输入验证码后,服务器...

    Java生成图形验证码

    Java生成图形验证码

    java生成随机加减法的图形验证码

    首先,`IdentifyingCode.java`可能是一个类,它代表验证码对象,包含了生成验证码的核心逻辑。这个类通常会包含以下几个关键部分: 1. **生成随机数字**:为了创建加减法问题,我们需要生成两个或更多随机整数。...

Global site tag (gtag.js) - Google Analytics