Spring+JCaptcha验证码使用示例
1,导入jcaptcha.jar包,这里用的是1.0版本
2,编写captcha-context.xml配置文件(非必须,可在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.xsd">
- <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>0123456789</value>
- <!-- <value>abcdefghijklmnopquvwxyz</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>16</value>
- </constructor-arg>
- <!--最大字体-->
- <constructor-arg index="1">
- <value>20</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>12</value></constructor-arg>
- </bean>
- </list>
- </constructor-arg>
- </bean>
- <bean id="backGenUni" class="com.octo.captcha.component.image.backgroundgenerator.FunkyBackgroundGenerator">
- <!--背景宽度-->
- <constructor-arg index="0">
- <value>90</value>
- </constructor-arg>
- <!--背景高度-->
- <constructor-arg index="1">
- <value>30</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>
3,编写JcaptchaServlet响应请求提供验证码输出:
- protected void doGet(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- byte[] captchaChallengeAsJpeg = null;
- // 输出jpg的字节流
- ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
- try {
- // get the session id that will identify the generated captcha.
- // the same id must be used to validate the response, the session id
- // is a good candidate!
- String captchaId = session.getSessionId(request);
- BufferedImage challenge = captchaService.getImageChallengeForID(
- captchaId, request.getLocale());
- // a jpeg encoder
- JPEGImageEncoder jpegEncoder = JPEGCodec
- .createJPEGEncoder(jpegOutputStream);
- jpegEncoder.encode(challenge);
- } catch (IllegalArgumentException e) {
- response.sendError(HttpServletResponse.SC_NOT_FOUND);
- return;
- } catch (CaptchaServiceException e) {
- response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
- return;
- }
- captchaChallengeAsJpeg = jpegOutputStream.toByteArray();
- // flush it in the response
- response.setHeader("Cache-Control", "no-store");
- response.setHeader("Pragma", "no-cache");
- response.setDateHeader("Expires", 0);
- response.setContentType("image/" + CAPTCHA_IMAGE_FORMAT);
- ServletOutputStream responseOutputStream = response.getOutputStream();
- responseOutputStream.write(captchaChallengeAsJpeg);
- responseOutputStream.flush();
- responseOutputStream.close();
- }
4,在web.xml中添加该servlet:
- <!-- Jcaptcha -->
- <servlet>
- <servlet-name>Jcaptcha</servlet-name>
- <servlet-class>cn.xxx.JcaptchaServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>Jcaptcha</servlet-name>
- <url-pattern>/captcha.jpg</url-pattern>
- </servlet-mapping>
5,在html中显示验证码只需要以下代码:
- <div><img src="${base }/captcha.jpg" onclick="this.src='${base}/captcha.jpg?'+Math.random()"/></div>
- <div class="input_capt">验证码: <input type="text"id="captcha" name="captcha" />
6,后台验证的话,只需要调用ImageCaptchaService的一个方法即可:
- imageCaptchaService.validateResponseForID(session.getSessionId(getRequest()), captcha);
Spring+JCaptcha验证码使用示例的更多相关文章
- Spring @Transactional使用的示例
Spring @Transactional使用的示例: 参考: http://blog.csdn.net/seng3018/article/details/6690527 http://blog.si ...
- spring原理案例-基本项目搭建 03 创建工程运行测试 spring ioc原理实例示例
下面开始项目的搭建 使用 Java EE - Eclipse 新建一 Dynamic Web Project Target Runtime 选 Apache Tomcat 7.0(不要选 Apache ...
- Spring中的IOC示例
Spring中的IOC示例 工程的大概内容是: 一个人在中国时用中国话问候大家,在国外时用英语问候大家. 其中, IHelloMessage是接口,用来定义输出问候信息 public interfac ...
- jQuery实现倒计时重新发送短信验证码功能示例
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 由Nginx反向代理引出的JCaptcha验证码验证失败的问题
搜索关键字: 1)Windows本地开发正常,部署到Linux远程服务器上JCaptcha验证失败 2)Linux远程服务器上JCpatcha验证失败 3)Nginx反向代理后JCaptcha验证失败 ...
- 手写Mybatis和Spring整合简单版示例窥探Spring的强大扩展能力
Spring 扩展点 **本人博客网站 **IT小神 www.itxiaoshen.com 官网地址****:https://spring.io/projects/spring-framework T ...
- 【译】Spring 4 @Profile注解示例
前言 译文链接:http://websystique.com/spring/spring-profile-example/ 本文将探索Spring中的@Profile注解,可以实现不同环境(开发.测试 ...
- Spring学习总结(六)——Spring整合MyBatis完整示例
为了梳理前面学习的内容<Spring整合MyBatis(Maven+MySQL)一>与<Spring整合MyBatis(Maven+MySQL)二>,做一个完整的示例完成一个简 ...
- Spring集成MyBatis完整示例
该文详细的通过Spring IOC.MyBatis.Servlet.Maven及Spring整合MyBatis的等技术完成一个简单的图书管理功能,实现图书列表.删除.多删除.编辑.新增功能.梳理前面学 ...
随机推荐
- Package 'sun-java6-jdk' has no installation candidate 解决方式【转】
本文转载自:http://www.cnblogs.com/changefuture/archive/2012/06/19/2554876.html 解决方式: sudo add-apt-reposit ...
- Entityframework连接Mysql遇到的问题
1.mysql.data.entity的版本一定要与mysql-connector-net的版本保持一致,我用的版本是6.9.12 2.有时会遇到连接MySQL数据库时提示missing server ...
- C语言 写的 表达式求值。
有不对的地方还望指出来,让我改正.谢谢.存一个代码 #include<stdio.h> #include<stdlib.h> #include<string.h> ...
- C++之const类成员变量,const成员函数
const修饰类的成员函数 const修饰变量一般有两种方式:const T *a,或者 T const *a,这两者都是一样的,主要看const位于*的左边还是右边,这里不再赘述,主要来看一下当co ...
- xen添加网卡
brctl addbr xenbr0 ifconfig xenbr0 up ifconfig xenbr0 192.168.0.1 /etc/xen/scripts/network-bridge st ...
- Qt5.7不能加载MySql驱动问题.(需要重新编译驱动)
转自:http://blog.csdn.net/qq_28851503/article/details/52422302 首先贴上我遇到的问题,如下: QSqlDatabase: QMYSQL dri ...
- java:calendar类及一些比较实用的utils(二)
在这里将我在项目中用到的一些关于使用Calendar的utils分享出来,只是一部分,后期遇到好的通用方法会继续添加,以和大家交流学习,如果你还不熟悉这个类的使用,但是急需某个util,可以加群:41 ...
- Python_XML的三种解析方法
什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这 ...
- sql语句之正则表达式
select * from employee where name regexp '^jin' select * from employee where name regexp '^jin.*(g|n ...
- 微信小程序开发之页面wxml里面实现循环 wx:for
js代码: Page({ data:{ upploadimagelist:{}, //上报图片列表 js数组 }}) 后台数据库保存的格式:{"imageList":[{&q ...