文档章节

jcaptche使用例子

xpbob
 xpbob
发布于 2016/08/06 11:03
字数 559
阅读 28
收藏 1
点赞 0
评论 0

 

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
粉丝 70
博文 68
码字总数 54102
作品 0
Java中的泛型(二)

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

阿杜 ⋅ 2017/12/09 ⋅ 0

Java泛型基础(二)

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

杜琪 ⋅ 2017/12/09 ⋅ 0

bootstrap-图标菜单按钮组件

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

lilyping ⋅ 2017/11/23 ⋅ 0

bootstrap-输入框和导航组件

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

lilyping ⋅ 2017/11/22 ⋅ 0

Qt 多线程之 std::thread (一)

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

晨曦之光 ⋅ 2012/05/08 ⋅ 0

bootstrap--下拉菜单和滚动监听插件

image.png 一、下拉菜单 image.png 例子 例子 效果图 效果图 data-toggle内部容器可以使用,如:下拉菜单 data-toggle,data-target外部容器可以使用 如:弹窗 例子 image.png 效果图 image....

lilyping ⋅ 2017/11/23 ⋅ 0

golang入门学习笔记(三)

作者: 一字马胡 转载标志 【2017-11-23】 更新日志 日期 更新内容 备注 2017-11-23 新建文章 go语言入门学习笔记(三) golang入门学习笔记系列 golang入门学习笔记(一) golang入门学习笔...

一字马胡 ⋅ 2017/11/24 ⋅ 0

LLVM每日谈之十五 LLVM自带的examples

作者:snsn1984 在LLVM源码的目录下,有一个目录叫做examples,这个目录下边有几个LLVM的例子,初学者一般不会太关注这些例子,但是这些例子确实是精华中 的精华,在LLVM的学习过程中不可避免...

snsn1984 ⋅ 2013/07/08 ⋅ 0

Spring、Spring Boot 和 TestNG 测试指南 ( 3 )

原文出处:chanjarster Spring&Spring Boot Testing工具提供了一些方便测试的Annotation,本文会对其中的一些做一些讲解。 @TestPropertySource @TestPropertySource可以用来覆盖掉来自于系...

chanjarster ⋅ 2017/12/10 ⋅ 0

命令行神器 Click 简明笔记

Click Click 是用 Python 写的一个第三方模块,用于快速创建命令行。我们知道,Python 内置了一个 Argparse 的标准库用于创建命令行,但使用起来有些繁琐,Click 相比于 Argparse,就好比 re...

funhacks ⋅ 2017/11/29 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

两道面试题,带你解析Java类加载机制

在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: class Grandpa{ static { System.out.println("爷爷在静态代码块"); }} cl...

1527 ⋅ 19分钟前 ⋅ 0

SpringCloud(Data Flow)

dataflow-server

赵-猛 ⋅ 29分钟前 ⋅ 0

深入理解Java虚拟机

这本书我读到第8章,之后就是在读不下去了。 读到后面是一种痛苦的体验,太多的东西是不全面的,大量的专有名词是没有解释的,读到最后很多东西仅仅是一个侧面,所以我觉得,这本书不适合初学...

颖伙虫 ⋅ 35分钟前 ⋅ 0

B树和B+树的总结

B树 为什么要B树 磁盘中有两个机械运动的部分,分别是盘片旋转和磁臂移动。盘片旋转就是我们市面上所提到的多少转每分钟,而磁盘移动则是在盘片旋转到指定位置以后,移动磁臂后开始进行数据的...

浮躁的码农 ⋅ 38分钟前 ⋅ 0

NanoPi NEO core/ Ubuntu16.04单网卡配置3个IP地址(2个静态,1个动态)

配置 root@NanoPi-NEO-Core:/etc/network# cat interfacesauto loiface lo inet loopbackallow-hotplug eth0iface eth0 inet static address 172.31.188.249 netmask 255.......

SamXIAO ⋅ 今天 ⋅ 0

三步为你的App集成LivePhoto功能

摘要:LivePhoto是iOS9新推出的一种拍照方式,类似于拍摄Gif图或录制视频片段生成图片。如果没有画面感,可以联想《哈利波特》霍格沃茨城堡的壁画,哈哈,很炫酷有木有,但坑爹的是只有iphone6S以...

壹峰 ⋅ 今天 ⋅ 0

centos7 git安装

由于centos中的源仓库中git不是最新版本,需要进行源码安装。 1、查看yum仓库git信息 [root@iZm5e3d4r5i5ml889vh6esZ zh]# yum info gitLoaded plugins: fastestmirrorLoading mirror s...

xixingzhe ⋅ 今天 ⋅ 0

input file 重复上传同一张图片失效的解决办法

解决办法 方法一:来回切换input[type='file']的type属性值,可以是‘text’,'button','button'....,然后再切换回来‘file’ 方法二:每次取消图片预览后,重置input[type='file']的value的...

时刻在奔跑 ⋅ 今天 ⋅ 0

Mahout推荐算法API详解

前言 用Mahout来构建推荐系统,是一件既简单又困难的事情。简单是因为Mahout完整地封装了“协同过滤”算法,并实现了并行化,提供非常简单的API接口;困难是因为我们不了解算法细节,很难去根...

xiaomin0322 ⋅ 今天 ⋅ 0

WampServer默认web服务器根目录位置

安装WampServer之后的web服务器根目录默认位置在WampServer安装目录下的www:

临江仙卜算子 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部