java验证码的代码_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代码

com.github.bingoohuang

patchca

0.0.1

ValidCode

validImg.ValidCode

ValidCode

/validImg.jpg

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java学习(37):二维数组

/4 利用嵌套循环完成以下二维数组的遍历&#xff0c;体会二维数组或多维数组元素的遍历方法及每个维数数组元素的下标特点。/ import java.util.Scanner; public class test06 { public static void main(String[] args){ Scanner in new Scanner(System.in); System.out.print…

java.util.stream_java.util.stream.Stream 接口中的常用方法

流模型的操作很丰富&#xff0c;下面介绍一些常用的API。这些方法可以被分成两种&#xff1a;延迟方法返回值类型仍然是 Stream 接口自身类型的方法&#xff0c;因此支持链式调用。(除了终结方法外&#xff0c;其余方 法均为延迟方法。)终结方法返回值类型不再是 Stream 接口自…

SRM 698 div1 RepeatString

250pts RepeatString 题意&#xff1a;问最少修改多少次将一个字符串修改为AA的形式。可以插入一个字符&#xff0c;删除一个字符&#xff0c;修改字符。 思路&#xff1a;枚举分界点&#xff0c;然后dp一下。 1 /*2 * Author: mjt3 * Date: 2018-10-17 19:50:164 * Last Mod…

java学习(38):数组排序(直接排序)

/5 有一个长度为10的int类型数组,存储了10个年龄数据,利用Eclipse工具设计一个java控制台程序, 完成将这个int类型数组中年龄进行算法对比,将10个年龄重新存储在新数组中,新数组中存储年龄应符合以下规则: 降序排列 ./ import java.util.Scanner; public class test07 { public…

java学习(39):九九乘法表

public class test08{ public static void main(String[] args){ for(int i1;i<9;i){ System.out.println(); for(int j1;j<i;j){ System.out.print("\t"i""j""(ij)); } } } }

java 私有变量访问_Java - 访问私有实例变量

我需要从以下类列表(Species.java)访问私有变量&#xff0c;以便在KlingonOx.java类中使用它们。KlingonOx.java类的目的是确定大象物种的种群数量将大于克林贡牛种的数量。这是Species.java类&#xff1a;import java.util.Scanner;public class Species{private String name;…

setState是异步还是同步?

react中setState是同步还是异步困扰了好久&#xff0c;今天终于有了答案&#xff1b;它既是同步的&#xff0c;也是异步的&#xff1b; 批量更新&#xff1a; 加入我在页面上写三个setState去分别 componentDidMount() {this.setState({ val: this.state.val 1 }) console.log…

java学习(40):成员实例的定义和访问

定义一个student类 public class student { String name;//输入姓名 int age;//输入年龄 String address;//输入地址 char sex;//输入性别 double height;//输入身高 } 定义一个teststudent类 //成员实例的定义和访问 public class testStudent { public static void main(Stri…

简易计算器 java_终于写出一个简单的计算器了

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼import javax.swing.*;import java.awt.event.*;import java.awt.*;import java.util.Scanner;//import java.util.Scanner;public class Jisuanji {JLabel JLabel1;JLabel JLabel2;JLabel JLabel3;//标签JFrame mainJFrame;//布局…

2018.10.20 NOIP模拟 蛋糕(线段树+贪心/lis)

传送门 听说是最长反链衍生出的对偶定理就能秒了。 本蒟蒻直接用线段树模拟维护的。 对于第一维排序。 维护第二维的偏序关系可以借助线段树/树状数组维护逆序对的思想建立权值线段树贪心求解。代码 转载于:https://www.cnblogs.com/ldxcaicai/p/10084858.html

java学习(41):成员实例的定义和访问续

定义一个studentstudy类 /1 使用Eclipse编写控制台应用程, 编写一个用来表示学生的java类&#xff0c; 并在类中定义描述学生特征的属性&#xff0c;姓名&#xff0c;年龄&#xff0c;性别&#xff0c;身高&#xff0c;体重和电话&#xff0c; 要求属性设置为私有访问级别并为私…

brew 安装 mysql5.7_Mac——brew替换源地址安装配置mysql@5.7版本

问题描述&#xff1a;使用brew方式安装mysql&#xff0c;存在以下问题&#xff1a;1.由于mysql已经升级到8.x版本&#xff0c;会默认安装8.x版本&#xff0c;会对之前部分特性不友好支持&#xff1b;2.brew默认安装源下载响应时间非常慢&#xff0c;下载时间过长容易超时&#…

ftp的本地用户搭建

前期的准备跟虚拟用户一样&#xff0c;就是配置文件不一样 修改配置文件 就是共享的都是自己的账号的家目录&#xff0c;然后启动服务就可以了 本地登陆的都是自己的账号密码 ftp本地的黑名单&#xff0c; 转载于:https://www.cnblogs.com/cash-su/p/9824553.html

java学习(42):巩固练习

定义一个testjava类 /*4 编写一个TestStudentOverrideConstructor.java类&#xff0c; 包含main方法&#xff0c;从控制台接收用户输入的学生信息&#xff0c;包括学生姓名&#xff0c;性别和年龄&#xff0c;使用带参数的构造器创建学生对象并将接收到的输入传递给这个构造器参…

错误解决:常出现在iis搭建网站

不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定 在全新安装的IIS7下搭建网站&#xff0c;访问页面时出现错误信息如下&#xff1a; 配置错误 不能在此路径中使用此配置节。如果在父级别上锁定了该节&#xff0c;便会出现这种情况。锁定是默认…

java收发邮寄_JavaMail收发邮件的一般流程与主要方法

1、Properties属性类Properties p new Properties();p.put(key, value);key-| mail.smtp.host-| mail.smtp.port-| mail.smtp.auth->"true":"false"2、生成Authenticator的子类Overrideprotected PasswordAuthenticationgetPasswordAuthentication(){r…

Java中TreeMap和TreeSet的底层实现

TreeSet底层则采用NavigableMap这个接口来保存TreeSet集合&#xff0c;而实际上NavigableMap只是一个接口&#xff0c;实际上TreeSet还是用TreeMap来保存set元素。 TreeSet初始化的时候会new 一个TreeMap进行初始化&#xff1b; private transient NavigableMap<E,Object>…

oracle 11g数据库数据操作(亲测)

oracle 11g安装和oracle数据库监听配置就不说了&#xff0c;直接说数据库的相关操作 建立 wiicare 用户 create directory dump_dir as ‘d:\test\dump’; 使用 PLSQL Developer 连接数据库 登陆数据库&#xff0c;用户名:system 密码: 123456 连接为&#xff1a;sysdba 新建表…

使用mybatis操作AS400数据库

先简单说一下怎么使用【jt400.jar】连接AS400上的DB2数据库。 ※ jt400.jar资源&#xff0c;如果有安装AS400客户端的话&#xff0c;参考IBM官网 ※ http://www-01.ibm.com/support/docview.wss?uidswg21398042 安装目录下就有jt400.zip&#xff0c;改个后缀就能用了。 如果没…

java ajax 获取headers_Ajax获取Response头信息

$.ajax({type: HEAD, // 获取头信息&#xff0c;typeHEAD即可url : window.location.href,complete: function( xhr,data ){// 获取相关Http Response headervar wpoInfo {// 服务器端时间"date" : xhr.getResponseHeader(Date),// 如果开启了gzip&#xff0c;会返回…