java实用验证码的实现代码

 更新时间:2016年03月23日 15:12:32   作者:小南风  
这篇文章主要为大家介绍了java实用验证码的实现代码,验证码实际上就是随机选择一些字符以图片的形式展现在页面上,感兴趣的小伙伴们可以参考一下

本文为大家分享了java实用验证码的实现代码,供大家参考,具体内容如下

1、ValidCode     

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 {
 
  }
 
 
}

2.XML代码

<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>

以上就是本文的全部内容,希望对大家的学习有所帮助。

相关文章

  • Java实现FTP批量大文件上传下载篇1

    Java实现FTP批量大文件上传下载篇1

    这篇文章主要为大家详细介绍了Java实现FTP批量大文件上传下载的基础篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Spring Cache 集成 Caffeine实现项目缓存的示例

    Spring Cache 集成 Caffeine实现项目缓存的示例

    本文主要介绍了Spring Cache 集成 Caffeine实现项目缓存的示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • 谈谈 Java 中 this 的使用方法

    谈谈 Java 中 this 的使用方法

    这篇文章主要介绍了Java 中 this 的使用方法,需要的朋友可以参考下
    2014-01-01
  • Java Hibernate使用方法及整合查询

    Java Hibernate使用方法及整合查询

    这篇文章主要介绍了Java使用与整合Hibernate,在正式进入Hibernate的高级应用之前,需要了解声明是数据模型与领域模型,这两个概念将会帮助我们更好的理解实体对象的关联关系映射
    2023-04-04
  • Java函数式编程(八):字符串及方法引用

    Java函数式编程(八):字符串及方法引用

    这篇文章主要介绍了Java函数式编程(八):字符串及方法引用,本文是系列文章的第8篇,其它文章请参阅本文底部的相关文章,需要的朋友可以参考下
    2014-09-09
  • Java多文件生成并压缩下载功能(思路详解)

    Java多文件生成并压缩下载功能(思路详解)

    这篇文章主要介绍了Java多文件生成并压缩下载,本文给大家分享两种思路通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • java生成文件夹和文件的简单示例分享

    java生成文件夹和文件的简单示例分享

    这篇文章主要介绍了java生成文件夹和文件的简单示例,需要的朋友可以参考下
    2014-04-04
  • java虚拟机参数-D、-X和-XX的区别小结

    java虚拟机参数-D、-X和-XX的区别小结

    本文主要介绍了java虚拟机参数-D、-X和-XX的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • mybatis报Query was Empty异常的问题

    mybatis报Query was Empty异常的问题

    这篇文章主要介绍了mybatis报Query was Empty异常的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Springboot+AOP实现时间参数格式转换

    Springboot+AOP实现时间参数格式转换

    前端传过来的时间参数,后端可以自定义时间格式转化使用,这样想转成什么就转成什么。本文将利用自定义注解AOP实现时间参数格式转换,感兴趣的可以了解一下
    2022-04-04

最新评论