- 浏览: 84036 次
最新评论
-
h416373073:
内容不多
properties几点注意事项 -
编程的石头:
COPY过去了,呵呵,偷点懒,没看懂的可以去看下这篇文章,原理 ...
Log4j多个日志文件 -
tianwaishan:
路过,,,,
properties几点注意事项 -
rich3385:
好贴,有帮助,如果能深入详细一些就更好了。
Birt初探 -
spacefly:
顶 ssss
利用开源组件制作验证码
jsp验证码制作
介绍两个功能强大的开源制作验证码组件SimpleCaptcha,JCAPTCHA。
一、SimpleCaptcha搜狐邮箱注册时就使用了该组件,主页:
http://simplecaptcha.sourceforge.net/index.html
1.配置
将下载的jar文件放置工程的lib目录下,打开工程的web.xml文件加上相应的配置
<servlet>
<servlet-name>Captcha</servlet-name>
<servlet-class>nl.captcha.servlet.CaptchaServlet</servlet-class>
<!--边框显示参数-->
<init-param>
<param-name>cap.border</param-name>
<param-value>yes</param-value>
</init-param>
<!-- 设置图片边框色 -->
<init-param>
<param-name>cap.border.c</param-name>
<param-value>green</param-value>
</init-param>
<!-- 边框粗细-->
<init-param>
<param-name>cap.border.th</param-name>
<param-value>1</param-value>
</init-param>
<!-- the image producer. Currently only one-->
<init-param>
<param-name>cap.cap.producer</param-name>
<param-value>
nl.captcha.obscurity.imp.DefaultCaptchaIml
</param-value>
</init-param>
<!-- 设置验证码的内容 -->
<init-param>
<param-name>cap.text.producer</param-name>
<!--<param-value>Default</param-value>-->
<!-- 此处是我自定义的一个显示中文的类 -->
<param-value>org.ChineseTextProducer</param-value>
</init-param>
<!-- 此处可不定义,可在自定义类中定义所有的要显示的内容 -->
<init-param>
<param-name>cap.char.arr</param-name>
<param-value>
2,3,4,6,7,8,9,a,b,c,d,e,f,g,h,j,k,l,m,n,o,p,q,r,s,t,u,v,x,y,z
</param-value>
</init-param>
<!-- 设置图片显示内容长度 -->
<init-param>
<param-name>cap.char.arr.l</param-name>
<param-value>4</param-value>
</init-param>
<init-param>
<param-name>cap.font.arr</param-name>
<!-- 如果使用中文时设置成中文的字体 -->
<param-value>
Arial,Helvetica,Courier,TimesRoman,宋体,黑体
</param-value>
</init-param>
<!-- 设置字体大小 -->
<init-param>
<param-name>cap.font.size</param-name>
<param-value>30</param-value>
</init-param>
<!-- 设置图片字体色 -->
<init-param>
<param-name>cap.font.color</param-name>
<param-value>white</param-value>
</init-param>
<!-- 扭曲; 曲解; 变形 begin -->
<!-- 图片效果1
<init-param>
<param-name>cap.obscurificator</param-name>
以下任选一
<param-value>nl.captcha.obscurity.imp.ShadowGimpyImp</param-value>
<param-value>nl.captcha.obscurity.imp.WaterRiple</param-value>
<param-value>nl.captcha.sandbox.TestGimpyImp</param-value>
</init-param>
-->
<init-param>
<param-name>cap.obscurificator</param-name>
<param-value>org.FishEyeGimpyImp</param-value>
</init-param>
<init-param>
<param-name>cap.border</param-name>
<param-value>no</param-value>
</init-param>
<init-param>
<param-name>cap.char.arr.l</param-name>
<param-value>6</param-value>
</init-param>
<init-param>
<param-name>cap.background.c.to</param-name>
<param-value>white</param-value>
</init-param>
<init-param>
<param-name>cap.background.c.from</param-name>
<param-value>white</param-value>
</init-param>
<!--扭曲; 曲解; 变形 end 不想要这种效果可注释以上代码-->
<init-param>
<param-name>cap.distortionImp</param-name>
<param-value />
</init-param>
<init-param>
<param-name>cap.backgroundImp</param-name>
<param-value />
</init-param>
<!-- 此处色为渐变的色 -->
<init-param>
<param-name>cap.background.c.to</param-name>
<param-value>black</param-value>
</init-param>
<!-- 图片左边色 -->
<init-param>
<param-name>cap.background.c.from</param-name>
<param-value>black</param-value>
</init-param>
<!--干扰线实现类-->
<init-param>
<param-name>cap.noiseImp</param-name>
<param-value>nl.captcha.obscurity.imp.DefaultNoiseImp</param-value>
</init-param>
<!-- 干扰线色
<init-param>
<param-name>cap.noise.c</param-name>
<param-value>255,245,219</param-value>
</init-param>
-->
</servlet>
<servlet-mapping>
<servlet-name>Captcha</servlet-name>
<url-pattern>/Captcha.jpg</url-pattern>
</servlet-mapping>
以上配置可根据喜好设置。
2、调用显示
在要显示验证码的页面中加入<img src="Captcha.jpg">即可显示生成的验证码
3、后台验证
验证非常简单,通过session.getAttribute(nl.captcha.servlet.Constants.SIMPLE_CAPCHA_SESSION_KEY);即可得到组件生成
的验证码,然后与前台传递的用户填写的内容比较即可。
注:如果要自定义验证码的内容可以继承DefaultTextCreator类,覆写getText()方法即可,方法返回的是一个字符串。
二、JCAPTCHA,该组件功能非常强大,可以生成word、图片、声音等验证码。主页:
http://forge.octo.com/jcaptcha/confluence/display/general/Home
http://jcaptcha.sourceforge.net/
更多实例可以查看:http://forge.octo.com/jcaptcha/confluence/display/general/Samples+tests
1、配置
下载JCAPTCHA后将jcaptcha.jar和commons-collections-2.1以上.jar(单独下载,地址:http://commons.apache.org/collections/)放置工程lib目录下。
2、Implement a CaptchaService
import com.octo.captcha.service.image.ImageCaptchaService;
import com.octo.captcha.service.image.DefaultManageableImageCaptchaService;
public class CaptchaServiceSingleton {
private static ImageCaptchaService instance = new DefaultManageableImageCaptchaService();
public static ImageCaptchaService getInstance(){
return instance;
}
}
3、编写一个产生验证码的servlet
public class ImageCaptchaServlet extends HttpServlet {
protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)
throws ServletException, IOException {
byte[] captchaChallengeAsJpeg = null;
ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
try {
String captchaId = httpServletRequest.getSession().getId();
BufferedImage challenge =
CaptchaServiceSingleton.getInstance().getImageChallengeForID(captchaId,
httpServletRequest.getLocale());
JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(jpegOutputStream);
jpegEncoder.encode(challenge);
} catch (IllegalArgumentException e) {
httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
} catch (CaptchaServiceException e) {
httpServletResponse.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
return;
}
captchaChallengeAsJpeg = jpegOutputStream.toByteArray();
httpServletResponse.setHeader("Cache-Control", "no-store");
httpServletResponse.setHeader("Pragma", "no-cache");
httpServletResponse.setDateHeader("Expires", 0);
httpServletResponse.setContentType("image/jpeg");
ServletOutputStream responseOutputStream =
httpServletResponse.getOutputStream();
responseOutputStream.write(captchaChallengeAsJpeg);
responseOutputStream.flush();
responseOutputStream.close();
}
}
4、将servlet添加到web.xml文件中
<servlet>
<servlet-name>jcaptcha</servlet-name>
<servlet-class>ImageCaptchaServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jcaptcha</servlet-name>
<url-pattern>/jcaptcha</url-pattern>
</servlet-mapping>
5、在页面中显示
<img src="jcaptcha">
<input type='text' name='captcha_code' value=''>
6、后台验证
Boolean isResponseCorrect =Boolean.FALSE;
String captchaId = httpServletRequest.getSession().getId();
String response = httpServletRequest.getParameter("captcha_code");
try {
isResponseCorrect = CaptchaServiceSingleton.getInstance().validateResponseForID(captchaId,response);
} catch (CaptchaServiceException e) {
//TODO
}
最简单的开发过程结束,试运行一下效果!
注:要实现自己的验证引擎可以继承ListImageCaptchaEngine实现抽象方法buildInitialFactories()。
发表评论
-
JEECG我来了!
2013-05-04 17:12 339最 ... -
windows xp CVSNT
2009-02-06 14:22 2194环境:win xp sp2+cvsnt:2.5.04.3236 ... -
properties几点注意事项
2008-12-11 09:09 3005在项目中使用配置文件*.properties的几点注意事项:p ... -
Log4j多个日志文件
2008-11-24 16:51 4835Log4j的基本使用不再在此细说,在工作中有需求要将错误日志信 ... -
JMAGE 处理图片、给图片加水印
2008-08-01 13:56 2068战友是梦,睡也思恋;战友是魂,嵌入心田;战友是金,沉沉甸甸;战 ... -
Struts <html:multibox> <html:select>
2008-07-01 08:51 3271庆贺党的生日! 一、 ... -
ExtremeTable
2008-05-29 08:56 1627目前开源的JSP分页组件已有很多,像displayTag, ... -
Struts1.X
2008-04-29 09:10 1365文章主要内容是介绍本人在使用Struts过程中常用到的一些特性 ... -
JAVA IO 学习
2008-03-31 08:54 1144简单的创建一个文件: ... -
JAVA中获取路径
2008-02-29 12:59 4281JAVA中获取路径: 1.jsp中取得路径: 以工 ... -
JAVA处理日期时间
2007-12-29 09:43 4948JAVA处理日期时间常用方法: 1.java.util.Ca ... -
Hibernate 闲谈杂记
2007-11-30 12:38 3044Hibernate 闲话杂记 解压缩从Hibernate ... -
JSTL 展现页面内容
2007-09-10 10:16 2475祝恩师们节日快乐! JSP 标准标记库(JS ... -
Struts+Spring+Hibernate处理Lob(Blob,Clob)
2007-08-13 15:18 8321Struts+Spring+Hibernate处理Lob(B ... -
简述Abstract Class和Interface
2007-08-02 08:57 1506Abstract Class和Interfa ... -
轻松上传文件
2007-08-01 10:04 1838献给建军八十周年 文件上传在JAVA应用中比 ... -
JasperReport+iReport
2007-07-05 17:00 7070JasperForge.org 是开源门户网站 http ... -
Birt初探
2007-06-25 13:38 4722报表是作为企业应用中比较常用的功能模块 ...
相关推荐
GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,...
GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,...
GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,...
GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,...
GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,...
GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,...
GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,...
GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,...
GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,...
GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,...
GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,...
GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,...
7. **状态管理**:为了实现不同的验证状态,如初始状态、旋转状态和验证成功或失败的状态,开发者可以利用Flex的状态管理功能,通过改变组件的属性和子组件的可见性来切换状态。 8. **性能优化**:考虑到动画可能会...
开发者可以利用Bootstrap、Element UI等开源前端框架,这些框架提供了预设的样式和组件,可以快速搭建起一个基本的网页结构。然而,为了与12306的品牌形象保持一致,模板可能需要进行一定程度的定制,以满足特定的...
开发者可以利用这套源码,根据自己的需求定制UI设计,调整功能模块,实现个性化的影视应用。 二、影视源码解析: 影视源码是构建视频流媒体应用的基础,它通常包括视频数据获取、播放控制、用户界面展示等多个关键...
在ASP.NET中,可以利用AJAX和JavaScript技术创建一个轮播组件,实现图片的自动或手动切换。 5. **聊天室**:聊天室提供了一个实时交流的平台,用户可以讨论电影相关的话题。这可能涉及到WebSocket或SignalR等实时...
GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,...
在线考试系统是现代教育技术应用中的重要组成部分,它利用互联网技术提供便捷的远程测试环境,学生可以在任何有网络的地方参与考试。本系统采用SSH(Spring、Struts、Hibernate)框架来构建,这是一种广泛应用于Java...
Bootstrap是Twitter推出的一款开源的前端框架,它包含了一系列预先设计好的CSS和JavaScript组件,使得开发者可以快速地搭建具有专业外观的网页。 在"Binary admin"模板中,重点在于提供一套完整的UI界面,用于后台...
综合以上信息,这个压缩包提供的内容是一个基于易语言开发的《原神》自动化脚本,利用大漠插件进行游戏辅助,已去除验证码验证,并附带了安装、卸载插件的批处理文件以及相关的配置说明和坐标数据。用户可以通过解压...