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
36 ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
37 try {
38
39 BufferedImage challenge = imageCaptchaService.getImageChallengeForID(captchaId,locale);
40
41
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
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 }