1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 package fr.paris.lutece.plugins.captcha.modules.jcaptcha.service.image;
42
43 import fr.paris.lutece.portal.service.spring.SpringContextService;
44 import fr.paris.lutece.portal.service.util.AppLogService;
45
46 import java.awt.image.BufferedImage;
47 import java.io.ByteArrayOutputStream;
48 import java.io.IOException;
49
50 import javax.imageio.ImageIO;
51 import javax.servlet.Filter;
52 import javax.servlet.FilterChain;
53 import javax.servlet.FilterConfig;
54 import javax.servlet.ServletException;
55 import javax.servlet.ServletOutputStream;
56 import javax.servlet.ServletRequest;
57 import javax.servlet.ServletResponse;
58 import javax.servlet.http.HttpServletRequest;
59 import javax.servlet.http.HttpServletResponse;
60
61 import com.octo.captcha.service.CaptchaServiceException;
62 import com.octo.captcha.service.multitype.GenericManageableCaptchaService;
63
64
65
66
67 public class ImageCaptchaFilter implements Filter
68 {
69 private static final String PARAMETER_SESSION_IMAGE_CAPTCHA = "imageCaptcha";
70 private static final String LOGGER = "lutece.captcha";
71 private static final String IMAGE_TYPE = "jpeg";
72 private static final long serialVersionUID = -1806578484091247923L;
73
74
75
76
77 public void init( FilterConfig filterConfig ) throws ServletException
78 {
79
80
81
82 }
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98 public void doFilter( ServletRequest req, ServletResponse res, FilterChain filterChain ) throws IOException, ServletException
99 {
100 HttpServletRequest request = (HttpServletRequest) req;
101 HttpServletResponse response = (HttpServletResponse) res;
102
103 AppLogService.debug( LOGGER, "challenge captcha generation start" );
104
105 byte [ ] captchaChallengeImage = null;
106
107
108 ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream( );
109
110 try
111 {
112
113
114 GenericManageableCaptchaService captcha = (GenericManageableCaptchaService) SpringContextService.getBean( "jcaptcha.imageCaptchaService" );
115 AppLogService.info( "captcha : " + captcha );
116
117
118
119
120 BufferedImage challengeImage = captcha.getImageChallengeForID( request.getSession( ).getId( ), request.getLocale( ) );
121
122 ImageIO.write( challengeImage, IMAGE_TYPE, jpegOutputStream );
123
124
125
126
127 }
128 catch( IllegalArgumentException e )
129 {
130 AppLogService.error( "exception :" + e.getMessage( ), e );
131 response.sendError( HttpServletResponse.SC_NOT_FOUND );
132
133 return;
134 }
135 catch( CaptchaServiceException e )
136 {
137 AppLogService.error( "exception :" + e.getMessage( ), e );
138 response.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR );
139
140 return;
141 }
142
143 captchaChallengeImage = jpegOutputStream.toByteArray( );
144 request.getSession( ).setAttribute( PARAMETER_SESSION_IMAGE_CAPTCHA, captchaChallengeImage );
145
146 response.setHeader( "cache-control", "no-cache, no-store,must-revalidate,max-age=0" );
147 response.setHeader( "pragma", "no-store, no-cache" );
148 response.setHeader( "expires", "1" );
149 response.setContentType( "image/jpeg" );
150
151 ServletOutputStream responseOutputStream = response.getOutputStream( );
152 responseOutputStream.write( captchaChallengeImage );
153 responseOutputStream.flush( );
154 responseOutputStream.close( );
155 AppLogService.debug( LOGGER, "challenge captcha generation end" );
156 }
157
158
159
160
161 public void destroy( )
162 {
163
164 }
165 }