`
z75148885
  • 浏览: 184574 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

用开源组件jcaptcha做jsp彩色验证码

阅读更多
安装

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
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics