Jeecms验证码-jcaptcha

本文主要介绍jeecms中使用的验证码 jcapthcha.

 

这是个开源的软件,下载地址:

 

http://jcaptcha.sourceforge.net/

 

在jeecms中使用的版本是jcaptcha-1.0.jar.

 

  • web.xml里的配置
Xml代码   收藏代码
  1. <servlet>  
  2.     <servlet-name>Jcaptchaservlet-name>  
  3.     <servlet-class>com.jeecms.common.captcha.JcaptchaServletservlet-class>  
  4. servlet>  
  5. <servlet-mapping>  
  6.     <servlet-name>Jcaptchaservlet-name>  
  7.     <url-pattern>/captcha.svlurl-pattern>  
  8. servlet-mapping>  

 注意,这里的url使用的是/captcha.svl.

 

servlet JcaptchaServlet 重新写了生成图片的代码。

 

  • login.html中的配置
Html代码   收藏代码
  1. <span><<span class="start-tag">formspan>  
  2.   
  3.   
  4.  <span class="attribute-name">idspan>  
  5.   
  6.   
  7. ="<a class="attribute-value">jvForma>  
  8.   
  9.   
  10. <span class="attribute-name">actionspan>  
  11.   
  12.   
  13. ="<a class="attribute-value">/login.jspxa>  
  14.   
  15.   
  16. <span class="attribute-name">methodspan>  
  17.   
  18.   
  19. ="<a class="attribute-value">posta>  
  20.   
  21.   
  22. ">span>  
  23.   
  24.   
  25. <span>  
  26. ...span>  
  27.   
  28.   
  29.    
  30. <td colspan="2"><img src="/captcha.svl" onclick="this.src='/captcha.svl?d='+new Date()*1"   
  31. width="100" height="35"/>td>  
  32. ...  
  33. form>  

    onclick 方法后面是如果点击此图片,则生成新的验证码图片。

 

  • 验证码的处理类CasLoginAct.java

包路径:package com.jeecms.cms.action.member;

 

验证的代码如下:

Java代码   收藏代码
  1. @RequestMapping(value = "/login.jspx", method = RequestMethod.POST)  
  2.     public String submit(String username, String password, String captcha,  
  3.             String processUrl, String returnUrl, String message,  
  4.             HttpServletRequest request, HttpServletResponse response,  
  5.             ModelMap model) {  
  6.         Integer errorRemaining = unifiedUserMng.errorRemaining(username);  
  7.         CmsSite site = CmsUtils.getSite(request);  
  8.         String sol = site.getSolutionPath();  
  9.         WebErrors errors = validateSubmit(username, password, captcha,  
  10.                 errorRemaining, request, response);  
  11.   
  12.   
  13. 。。。。。  
  14.   
  15. private WebErrors validateSubmit(String username, String password,  
  16.             String captcha, Integer errorRemaining, HttpServletRequest request,  
  17.             HttpServletResponse response) {  
  18.         WebErrors errors = WebErrors.create(request);  
  19.         if (errors.ifOutOfLength(username, "username"1100)) {  
  20.             return errors;  
  21.         }  
  22.         if (errors.ifOutOfLength(password, "password"132)) {  
  23.             return errors;  
  24.         }  
  25.         // 如果输入了验证码,那么必须验证;如果没有输入验证码,则根据当前用户判断是否需要验证码。  
  26.         if (!StringUtils.isBlank(captcha)  
  27.                 || (errorRemaining != null && errorRemaining < 0)) {  
  28.             if (errors.ifBlank(captcha, "captcha"100)) {  
  29.                 return errors;  
  30.             }  
  31.             try {  
  32.                 if (!imageCaptchaService.validateResponseForID(session  
  33.                         .getSessionId(request, response), captcha)) {  
  34.                     errors.addErrorCode("error.invalidCaptcha");  
  35.                     return errors;  
  36.                 }  
  37.             } catch (CaptchaServiceException e) {  
  38.                 errors.addErrorCode("error.exceptionCaptcha");  
  39.                 log.warn("", e);  
  40.                 return errors;  
  41.             }  
  42.         }  
  43.         return errors;  
  44.     }  
  45. 。。。。  
 

 

 

注意,image的生和验证,是根据sessionid为标识的。

比如生成时的代码:

Java代码   收藏代码
  1. String captchaId = session.getSessionId(request, response);  
  2.             BufferedImage challenge = captchaService.getImageChallengeForID(  
  3.                     captchaId, request.getLocale());  
  4.             // Jimi.putImage("image/jpeg", challenge, jpegOutputStream);  
  5.             ImageIO.write(challenge, CAPTCHA_IMAGE_FORMAT, jpegOutputStream);  
 

验证时的代码:

Java代码   收藏代码
  1. if (!imageCaptchaService.validateResponseForID(session  
  2.                         .getSessionId(request, response), captcha)) {  
  3.                     errors.addErrorCode("error.invalidCaptcha");  
  4.                     return errors;  

 

你可能感兴趣的:(Jeecms验证码-jcaptcha)