View Javadoc

1   package org.cateproject.controller.captcha;
2   
3   import java.awt.image.BufferedImage;
4   import java.io.ByteArrayOutputStream;
5   import java.io.OutputStream;
6   import java.util.Locale;
7   
8   import javax.imageio.ImageIO;
9   import javax.servlet.http.HttpServletResponse;
10  
11  import org.springframework.beans.factory.annotation.Autowired;
12  import org.springframework.stereotype.Controller;
13  import org.springframework.web.bind.annotation.PathVariable;
14  import org.springframework.web.bind.annotation.RequestMapping;
15  import org.springframework.web.bind.annotation.RequestMethod;
16  import org.springframework.web.servlet.ModelAndView;
17  
18  import com.octo.captcha.service.CaptchaServiceException;
19  import com.octo.captcha.service.image.ImageCaptchaService;
20  
21  @Controller
22  public class CaptchaController {
23  	
24  	private ImageCaptchaService imageCaptchaService;
25  	
26  	@Autowired
27  	public void setImageCaptchaService(ImageCaptchaService imageCaptchaService) {
28  		this.imageCaptchaService = imageCaptchaService;
29  	}
30  
31  	@RequestMapping(value = "/captcha/{captchaId}",method = RequestMethod.GET)
32  	public void handleRequest(@PathVariable(value = "captchaId") String captchaId, 
33  			                          Locale locale, HttpServletResponse response) throws Exception {
34  		byte[] captchaChallengeAsJpeg = null;
35  	    // the output stream to render the captcha image as jpeg into
36  	    ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
37  	    try {
38  	        // call the ImageCaptchaService getChallenge method
39  	        BufferedImage challenge = imageCaptchaService.getImageChallengeForID(captchaId,locale);
40  	            
41  	        // a jpeg encoder
42  	        ImageIO.write(challenge, "jpeg", jpegOutputStream);
43  	    } catch (IllegalArgumentException e) {
44  	            response.sendError(HttpServletResponse.SC_BAD_REQUEST);
45  	    } catch (CaptchaServiceException e) {
46  	        response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
47  	    }
48  
49  	    captchaChallengeAsJpeg = jpegOutputStream.toByteArray();
50  
51  	    // flush it in the response
52  	    response.setHeader("Cache-Control", "no-store");
53  	    response.setHeader("Pragma", "no-cache");
54  	    response.setDateHeader("Expires", 0);
55  	    response.setContentType("image/jpeg");
56  	    OutputStream outputStream = response.getOutputStream();
57  	    outputStream.write(captchaChallengeAsJpeg);
58  	    outputStream.flush();
59  	    outputStream.close();
60  	}
61  
62  }