1 28 package net.sf.jguard.jee.authentication.http; 29 30 import java.awt.image.BufferedImage ; 31 import java.io.ByteArrayOutputStream ; 32 import java.io.IOException ; 33 import java.util.Locale ; 34 35 import javax.servlet.ServletOutputStream ; 36 import javax.servlet.http.HttpServletRequest ; 37 import javax.servlet.http.HttpServletResponse ; 38 import javax.servlet.http.HttpSession ; 39 40 import net.sf.jguard.ext.SecurityConstants; 41 42 import org.apache.commons.logging.Log; 43 import org.apache.commons.logging.LogFactory; 44 45 import com.octo.captcha.module.config.CaptchaModuleConfig; 46 import com.octo.captcha.service.CaptchaService; 47 import com.octo.captcha.service.EhcacheManageableCaptchaService; 48 import com.sun.image.codec.jpeg.JPEGCodec; 49 import com.sun.image.codec.jpeg.JPEGImageEncoder; 50 51 56 public class CaptchaChallengeBuilder { 57 58 private static final Log logger = LogFactory.getLog(CaptchaChallengeBuilder.class); 59 60 public static void buildCaptchaChallenge(HttpServletRequest request, HttpServletResponse response) throws IOException { 61 HttpSession session = request.getSession(); 62 CaptchaService service = (CaptchaService) session.getServletContext().getAttribute(SecurityConstants.CAPTCHA_SERVICE); 63 if (service == null) { 64 logger.debug("captcha service should be defined "); 65 try { 66 service = (CaptchaService)Thread.currentThread().getContextClassLoader().loadClass(CaptchaModuleConfig.getInstance().getServiceClass()).newInstance(); 67 session.getServletContext().setAttribute(SecurityConstants.CAPTCHA_SERVICE, service); 68 } catch (InstantiationException e) { 69 logger.error(e.getMessage()); 70 } catch (IllegalAccessException e) { 71 logger.error(e.getMessage()); 72 } catch (ClassNotFoundException e) { 73 logger.error(e.getMessage()); 74 } 75 logger.debug(" CAPTCHA SERVICE=" + service.getClass().getName() + " will be defined"); 76 77 if (service.getClass().isAssignableFrom(EhcacheManageableCaptchaService.class)) { 78 ((EhcacheManageableCaptchaService) service).emptyCaptchaStore(); 79 } 80 81 } else { 82 logger.debug(" CAPTCHA SERVICE=" + service.getClass().getName()); 83 } 84 byte[] captchaChallengeAsJpeg = buildCaptchaChallenge(session.getId(),request.getLocale(), service); 85 86 87 response.setHeader("Cache-Control", "no-store"); 89 response.setHeader("Pragma", "no-cache"); 90 response.setDateHeader("Expires", 0); 91 response.setContentType("image/jpeg"); 92 ServletOutputStream responseOutputStream; 93 try { 94 responseOutputStream = response.getOutputStream(); 95 responseOutputStream.write(captchaChallengeAsJpeg); 96 responseOutputStream.flush(); 97 responseOutputStream.close(); 98 } catch (IOException e) { 99 logger.error(" captcha cannot be generated", e); 100 } 101 } 102 103 104 112 private static byte[] buildCaptchaChallenge(String captchaId,Locale locale,CaptchaService service) throws IOException { 113 114 byte[] captchaChallengeAsJpeg = null; 115 ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream (); 117 logger.debug("sessionID=" + captchaId); 120 BufferedImage challenge = (BufferedImage ) service.getChallengeForID(captchaId, locale); 122 logger.debug("challenge=" + service.getQuestionForID(captchaId, locale)); 123 logger.debug(" service=" + service); 124 125 JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(jpegOutputStream); 127 jpegEncoder.encode(challenge); 128 captchaChallengeAsJpeg = jpegOutputStream.toByteArray(); 129 return captchaChallengeAsJpeg; 130 } 131 132 } 133 | Popular Tags |