安装Add jcaptcha-all.jar (provided in
bin-distribution) and ehcache.jar (not provided see
ehcache site) to your application class path, ie in you WEB-INF/lib folder.
实例一个jcaptcha服务,注意,必须是单例模式的
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->importcom.octo.captcha.service.image.ImageCaptchaService;
importcom.octo.captcha.service.image.DefaultManageableImageCaptchaService;
publicclassCaptchaServiceSingleton{
privatestaticImageCaptchaServiceinstance=newDefaultManageableImageCaptchaService();
publicstaticImageCaptchaServicegetInstance(){
returninstance;
}
}
注:以上是默认的一个实现,下面是其他更多的实现
- SimpleListSoundCaptchaEngine //还可以用声音,真爽哦
- SpellerSoundCaptchaEngine
- SpellerSoundCaptchaEngine
- DefaultGimpyEngineCaptcha
- BaffleListGimpyEngineCaptcha
- BasicListGimpyEngineCaptcha
- DeformedBaffleListGimpyEngineCaptcha
- DoubleRandomListGimpyEngineCaptcha
- SimpleListImageCaptchaEngineCaptcha
- SimpleFishEyeEngineCaptcha
具体请参考
官方说明编写一个产生图片的servlet
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->importcom.octo.captcha.service.CaptchaServiceException;
importcom.sun.image.codec.jpeg.JPEGCodec;
importcom.sun.image.codec.jpeg.JPEGImageEncoder;
importjavax.servlet.ServletConfig;
importjavax.servlet.ServletException;
importjavax.servlet.ServletOutputStream;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjava.awt.image.BufferedImage;
importjava.io.ByteArrayOutputStream;
importjava.io.IOException;
publicclassImageCaptchaServletextendsHttpServlet{
publicvoidinit(ServletConfigservletConfig)throwsServletException{
super.init(servletConfig);
}
protectedvoiddoGet(HttpServletRequesthttpServletRequest,HttpServletResponsehttpServletResponse)throwsServletException,IOException{
byte[]captchaChallengeAsJpeg=null;
//theoutputstreamtorenderthecaptchaimageasjpeginto
ByteArrayOutputStreamjpegOutputStream=newByteArrayOutputStream();
try{
//getthesessionidthatwillidentifythegeneratedcaptcha.
//thesameidmustbeusedtovalidatetheresponse,thesessionidisagoodcandidate!
StringcaptchaId=httpServletRequest.getSession().getId();
//calltheImageCaptchaServicegetChallengemethod
BufferedImagechallenge=
CaptchaServiceSingleton.getInstance().getImageChallengeForID(captchaId,
httpServletRequest.getLocale());
//ajpegencoder
JPEGImageEncoderjpegEncoder=
JPEGCodec.createJPEGEncoder(jpegOutputStream);
jpegEncoder.encode(challenge);
}catch(IllegalArgumentExceptione){
httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}catch(CaptchaServiceExceptione){
httpServletResponse.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
return;
}
captchaChallengeAsJpeg=jpegOutputStream.toByteArray();
//flushitintheresponse
httpServletResponse.setHeader("Cache-Control","no-store");
httpServletResponse.setHeader("Pragma","no-cache");
httpServletResponse.setDateHeader("Expires",0);
httpServletResponse.setContentType("image/jpeg");
ServletOutputStreamresponseOutputStream=
httpServletResponse.getOutputStream();
responseOutputStream.write(captchaChallengeAsJpeg);
responseOutputStream.flush();
responseOutputStream.close();
}
}
为servlet修改web.xml配置文件
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><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>
编写你的客户端的展示
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><imgsrc="jcaptcha">
<inputtype='text'name='j_captcha_response'value=''>
上面的src="jcaptcha" 就是调用了上面的servlet,text里是用户填写的确认验证码
后台逻辑验证
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->BooleanisResponseCorrect=Boolean.FALSE;
//remenberthatweneedanidtovalidate!
StringcaptchaId=httpServletRequest.getSession().getId();
//retrievetheresponse
Stringresponse=httpServletRequest.getParameter("j_captcha_response");
//CalltheServicemethod
try{
isResponseCorrect=CaptchaServiceSingleton.getInstance().validateResponseForID(captchaId,
response);
}catch(CaptchaServiceExceptione){
//shouldnothappen,maybethrowniftheidisnotvalid
}
分享到:
相关推荐
利用java开源组件及servlet实现生成验证码
NULL 博文链接:https://lj-zhu.iteye.com/blog/1028970
支持验证码制作的开源组件,很好用
产品开源组件清单
Java验证码生成库 JCaptcha
许可证合规评估:识别您代码项目中使用的开源组件许可证,检查合规的风险 软件成分分析:识别您代码和基础环境中的三方组件依赖资产,并有效管理 墨菲安全提供的 CLI 工具,可用于在命令行检测指定目录代码的依赖...
使用最简方式使用了JCaptcha开源组件,非常适合学习
ptcha是一个开源的用来生成图形验证码的Java开源组件,使用起来也是非常的简单方便。 jcapthca是非常强大的,不光是可以生成图片式的验证码,还可以生成声音式的(新浪就使用了双重验证码)。 Jcaptcha是CAPTCHA里面...
OpenSCA是一款开源的软件成分分析工具,用来扫描项目的第三方开源组件依赖及漏洞信息
本文是自己根据实践总结的在AndroidStudio中引用其他开源组件的方法,图文并茂,亲测有效~
流布局服务用于开发前端微服务开源组件
java开源组件tts源码-文本转语音。The FreeTTS package contains a speech synthesis system written entirely in the Java programming language
开源代码使用指南 开源代码(Open Source):是促进软件发展的一种协作方式。与商用软件不同,它公开源代码, 允许用户直接拿来学习、开发。使用Open Source的应用受到Open Source的许可证限制,如有些 Open ...
NLOG 日志 开源 Visual Studio是一款功能非常强大的打日志开源组件,调用非常方便
NLOG 日志 开源组件 Visual Studio java是一款打日志的开源组件,里面己经封装好常见的打日志的函数。
开源报表打印组件JasperReports用法详解,开源报表打印组件JasperReports用法详解,开源报表打印组件JasperReports用法详解
FunWave是Swift3 简单的有趣的波纹开源组件
FMXComponents, Firemonkey开源组件 FMXComponents主站点:https://github.com/zhaoyipeng/FMXComponents镜像站点:https://gitee.com/zhaoyipeng/FMXComponents如果你正在使用这个
eos开源组件源码
这个确实不错,找了很久啊.开源as3组件代码。