文档章节

jcaptche使用例子

xpbob
 xpbob
发布于 2016/08/06 11:03
字数 559
阅读 30
收藏 1

 

spring管理类

 

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"

default-lazy-init="true">

 

<bean id="captchaService" class="com.octo.captcha.service.multitype.GenericManageableCaptchaService">

<constructor-arg index="0" ref="imageEngine"/>

<constructor-arg type="int" index="1" value="180"/>

<constructor-arg type="int" index="2" value="100000"/>

<constructor-arg type="int" index="3" value="75000"/>

</bean>

<bean id="imageEngine" class="com.octo.captcha.engine.GenericCaptchaEngine">

<constructor-arg index="0">

<list>

<ref bean="captchaFactory"/>

</list>

</constructor-arg>

</bean>

 

<bean id="captchaFactory" class="com.octo.captcha.image.gimpy.GimpyFactory">

<constructor-arg>

<ref bean="wordgen"/>

</constructor-arg>

<constructor-arg>

<ref bean="wordtoimage"/>

</constructor-arg>

</bean>

 

<bean id="wordgen" class= "com.octo.captcha.component.word.wordgenerator.RandomWordGenerator">

<!--可选字符-->

<constructor-arg>

<value>aabbccddeefgghhkkmnnooppqqsstuuvvwxxyyzz</value>

</constructor-arg>

</bean>

 

<bean id="wordtoimage" class="com.octo.captcha.component.image.wordtoimage.ComposedWordToImage">

<constructor-arg index="0">

<ref bean="fontGenRandom"/>

</constructor-arg>

<constructor-arg index="1">

<ref bean="backGenUni"/>

</constructor-arg>

<constructor-arg index="2">

<ref bean="decoratedPaster"/>

</constructor-arg>

</bean>

 

<bean id="fontGenRandom" class="com.octo.captcha.component.image.fontgenerator.RandomFontGenerator">

<!--最小字体-->

<constructor-arg index="0">

<value>26</value>

</constructor-arg>

<!--最大字体-->

<constructor-arg index="1">

<value>34</value>

</constructor-arg>

<constructor-arg index="2">

<list>

<bean class="java.awt.Font">

<constructor-arg index="0"><value>Arial</value></constructor-arg>

<constructor-arg index="1"><value>0</value></constructor-arg>

<constructor-arg index="2"><value>32</value></constructor-arg>

</bean>

</list>

</constructor-arg>

</bean>

<bean id="backGenUni" class="com.octo.captcha.component.image.backgroundgenerator.UniColorBackgroundGenerator">

<!--背景宽度-->

<constructor-arg index="0">

<value>110</value>

</constructor-arg>

<!--背景高度-->

<constructor-arg index="1">

<value>50</value>

</constructor-arg>

</bean>

 

<bean id="decoratedPaster" class="com.octo.captcha.component.image.textpaster.DecoratedRandomTextPaster">

<!--最大字符长度-->

<constructor-arg type="java.lang.Integer" index="0">

<value>4</value>

</constructor-arg>

<!--最小字符长度-->

<constructor-arg type="java.lang.Integer" index="1">

<value>4</value>

</constructor-arg>

<!--文本颜色-->

<constructor-arg index="2">

<ref bean="colorGen"/>

</constructor-arg>

<!--文本混淆-->

<constructor-arg index="3">

<list>

<!--<ref bean="baffleDecorator"/>-->

</list>

</constructor-arg>

</bean>

<bean id="baffleDecorator" class="com.octo.captcha.component.image.textpaster.textdecorator.BaffleTextDecorator">

<constructor-arg type="java.lang.Integer" index="0"><value>1</value></constructor-arg>

<constructor-arg type="java.awt.Color" index="1"><ref bean="colorWrite"/></constructor-arg>

</bean>

<bean id="colorGen" class="com.octo.captcha.component.image.color.SingleColorGenerator">

<constructor-arg type="java.awt.Color" index="0">

<ref bean="colorBlack"/>

</constructor-arg>

</bean>

<bean id="colorWrite" class="java.awt.Color">

<constructor-arg type="int" index="0">

<value>255</value>

</constructor-arg>

<constructor-arg type="int" index="1">

<value>255</value>

</constructor-arg>

<constructor-arg type="int" index="2">

<value>255</value>

</constructor-arg>

</bean>

<bean id="colorBlack" class="java.awt.Color">

<constructor-arg type="int" index="0">

<value>50</value>

</constructor-arg>

<constructor-arg type="int" index="1">

<value>50</value>

</constructor-arg>

<constructor-arg type="int" index="2">

<value>50</value>

</constructor-arg>

</bean>

</beans>

 

pom.xml需要配置第三方的jar包

 

 

<repositories>

<repository>

<id>atlassian</id>

<name>atlassian</name>

<url>http://maven.jahia.org/maven2/</url>

</repository>

</repositories>

 

maven

 

<dependency>

<groupId>com.octo.captcha</groupId>

<artifactId>jcaptcha</artifactId>

<version>1.0</version>

</dependency>

 

 

生成图片

 

@Controller

public class JCaptcheImg {

 

 

@Autowired

private ImageCaptchaService imageCaptchaService;

 

@RequestMapping("/img")

public void handleRequest(HttpServletRequest request, HttpServletResponse response) {

try {

ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();

String captchaId = request.getSession().getId();

BufferedImage challenge = imageCaptchaService.getImageChallengeForID(captchaId, request.getLocale());

 

response.setHeader("Cache-Control", "no-store");

response.setHeader("Pragma", "no-cache");

response.setDateHeader("Expires", 0L);

response.setContentType("image/jpeg");

 

ImageIO.write(challenge, "jpeg", jpegOutputStream);

byte[] captchaChallengeAsJpeg = jpegOutputStream.toByteArray();

 

ServletOutputStream respOs = response.getOutputStream();

respOs.write(captchaChallengeAsJpeg);

respOs.flush();

respOs.close();

} catch (IOException e) {

e.printStackTrace();

}

}

 

 

}

 

前端调用

 

<input type="text" id="captcha" name="captcha" maxlength="4" /> <img

src="img.do" onclick="this.src='img.do?d='+new Date().getTime()" />

 

后台校验

 

public class TestTemplate {

 

@Autowired

private ImageCaptchaService imageCaptchaService;

 

@RequestMapping("/login.do")

public void Login( String captcha, HttpServletRequest request) {

Boolean result = Boolean.FALSE;

 

Boolean isResponseCorrect = imageCaptchaService.validateResponseForID(request.getSession().getId(), captcha);

 

if (isResponseCorrect){

 

}else{

 

}

 

}

}

© 著作权归作者所有

共有 人打赏支持
xpbob
粉丝 98
博文 91
码字总数 73081
作品 0
高级程序员
私信 提问
Java中的泛型(二)

泛型可以应用于同一个类,该类可以针对多种类型使用,例如构建一个RedisTemplateService组件,用于处理当前应用中所有对象的缓存操作。这篇文章主要介绍泛型应用于接口、方法和匿名内部类的一...

阿杜
2017/12/09
0
0
bootstrap-图标菜单按钮组件

image.png 小图标组件 image.png http://v3.bootcss.com/components/#glyphicons(借鉴别人文章) 需要注意,可能在页面中使用图标时,设置好代码可图标却显示不出来,若遇到此问题,需要注意...

lilyping
2017/11/23
0
0
Java泛型基础(二)

本文首发于个人网站:Java中的泛型(二) 泛型可以应用于同一个类,该类可以针对多种类型使用,例如构建一个RedisTemplateService组件,用于处理当前应用中所有对象的缓存操作。这篇文章主要...

杜琪
2017/12/09
0
0
Qt 多线程之 std::thread (一)

不时见到有人会这样做: 不使用QThread,而是使用pthread等平台相关的底层 api 而又不想使用底层线程间同步、通讯的api 那么,如何使用pthread,而又使用Qt提供的线程间机制呢? 本文的初衷源...

晨曦之光
2012/05/08
605
0
bootstrap-输入框和导航组件

image.png 一.输入框组件 image.png (可以用在弄搜索条) 例子 例子 效果图 效果图 image.png 例子 例子 效果图 效果图 左侧使用下拉菜单分别式 image.png 例子 例子 效果图 效果图 二.导航...

lilyping
2017/11/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

不用编写程序代码,送你一个爬虫程序批量采集猫眼电影票房数据

"大数据"是一个体量特别大,数据类别特别大的数据集,并且这样的数据集无法用传统数据库工具对其内容进行抓取、管理和处理。 "大数据"首先是指数据体量(volumes)大,指代大型数据集,一般在1...

技术阿飞
15分钟前
0
0
【Flutter教程】从零构建电商应用(一)

在这个系列中,我们将学习如何使用google的移动开发框架flutter创建一个电商应用。本文是flutter框架系列教程的第一部分,将学习如何安装Flutter开发环境并创建第一个Flutter应用,并学习Flu...

笔阁
36分钟前
5
0
什么是以太坊DAO?(三)

Decentralized Autonomous Organization,简称DAO,以太坊中重要的概念。一般翻译为去中心化的自治组织。 投票支付合约的所有费用和行动需要时间,并要求用户始终保持活跃,知情和专注。另一...

geek12345
38分钟前
2
0
一个本科学生对Linux的认知

一个本科学生对Linux的认知 我是一名大三的普通一本大学的软件工程的一名学生,学校开设了一些关于系统开发的课程,纸上得来终觉浅,学校的课程课时较短,想要在56个课时之内学会一些公司需要...

linuxCool
今天
3
0
CentOS 安装Tomcat

Tomcat 介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 Java 程序写的网站用tomcat+jdk来运...

野雪球
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部