文档章节

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
粉丝 91
博文 81
码字总数 64397
作品 0
高级程序员
Java中的泛型(二)

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

阿杜
2017/12/09
0
0
Java泛型基础(二)

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

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

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

lilyping
2017/11/23
0
0
bootstrap-输入框和导航组件

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

lilyping
2017/11/22
0
0
Qt 多线程之 std::thread (一)

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

晨曦之光
2012/05/08
502
0

没有更多内容

加载失败,请刷新页面

加载更多

20.27 分发系统介绍~ 20.30 expect脚本传递参数

分发系统介绍分发系统-expect讲解(也就是一个分发的脚本)场景:业务越来越大,网站app,后端,编程语言是php,所以就需要配置lamp或者lnmp,最好还需要吧代码上传到服务器上;但是因...

洗香香
28分钟前
1
0
设计一个百万级的消息推送系统

前言 首先迟到的祝大家中秋快乐。 最近一周多没有更新了。其实我一直想憋一个大招,分享一些大家感兴趣的干货。 鉴于最近我个人的工作内容,于是利用这三天小长假憋了一个出来(其实是玩了两...

crossoverJie
34分钟前
1
0
软件架构:5种你应该知道的模式

Singleton(单例模式)、仓储模式(repository)、工厂模式(factory)、建造者模式(builder)、装饰模式(decorator)……大概每个上课听讲的程序员都不会陌生——软件的设计模式为我们提供...

好雨云帮
46分钟前
2
0
OSChina 周二乱弹 —— 这只是一笔金钱交易

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《暮春秋色》- 窦唯 / 译乐队 《暮春秋色》- 窦唯 / 译乐队 手机党少年们想听歌,请使劲儿戳(这里) @我没有抓狂:跨服聊...

小小编辑
58分钟前
617
16
df命令、du命令 、磁盘分区

9月25日任务 4.1 df命令 4.2 du命令 4.3/4.4 磁盘分区 4.1、命令 :df #磁盘空间使用情况 [root@zgxlinux-02 ~]# df 按字节显示 1000Byte=1KB 1000KB=1MB 1000MB=1GB ...

zgxlinux
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部