...
This
...
page
...
demonstrates
...
how
...
to
...
use
...
jcaptcha
...
in
...
your
...
application
...
.
...
This
...
tutorial
...
uses
...
the
...
CaptchaService
...
and
...
sub
...
components
...
(see
...
...
...
).
...
Install
...
it
Maven2 users
Add the following dependency to your project POM
Code Block |
---|
<dependency> <groupId>com.octo.captcha</groupId> <artifactId>jcaptcha</artifactId> <version>1.0-SNAPSHOT<0</version> </dependency> {code} h2. Without Maven2 Add |
Without Maven2
Add jcaptcha-all.jar
...
(provided
...
in
...
...
)
...
and
...
commons-collection-3.2
...
or
...
greater
...
(not
...
provided
...
see
...
...
...
)
...
to
...
your
...
application
...
class
...
path,
...
ie
...
in
...
you
...
WEB-INF/lib
...
folder.
...
Implement
...
a
...
CaptchaService
...
Note | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| =
|
|
|
| singleton}
{note}
{code}
| |||||||
Code Block |
---|
import com.octo.captcha.service.image.ImageCaptchaService;
import com.octo.captcha.service.image.DefaultManageableImageCaptchaService;
public class CaptchaServiceSingleton {
private static ImageCaptchaService instance = new DefaultManageableImageCaptchaService();
public static ImageCaptchaService getInstance(){
return instance;
}
}
{code}
h1. Code an image captcha servlet
{code} |
Code an image captcha servlet
Code Block |
---|
import com.octo.captcha.service.CaptchaServiceException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public class ImageCaptchaServlet extends HttpServlet {
public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
}
protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
byte[] captchaChallengeAsJpeg = null;
// the output stream to render the captcha image as jpeg into
ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
try {
// get the session id that will identify the generated captcha.
//the same id must be used to validate the response, the session id is a good candidate!
String captchaId = httpServletRequest.getSession().getId();
// call the ImageCaptchaService getChallenge method
BufferedImage challenge =
CaptchaServiceSingleton.getInstance().getImageChallengeForID(captchaId,
httpServletRequest.getLocale());
// a jpeg encoder
JPEGImageEncoder jpegEncoder =
JPEGCodec.createJPEGEncoder(jpegOutputStream);
jpegEncoder.encode(challenge);
} catch (IllegalArgumentException e) {
httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
} catch (CaptchaServiceException e) {
httpServletResponse.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
return;
}
captchaChallengeAsJpeg = jpegOutputStream.toByteArray();
// flush it in the response
httpServletResponse.setHeader("Cache-Control", "no-store");
httpServletResponse.setHeader("Pragma", "no-cache");
httpServletResponse.setDateHeader("Expires", 0);
httpServletResponse.setContentType("image/jpeg");
ServletOutputStream responseOutputStream =
httpServletResponse.getOutputStream();
responseOutputStream.write(captchaChallengeAsJpeg);
responseOutputStream.flush();
responseOutputStream.close();
}
}
{code}
h1. Add it to your |
Add it to your web.xml
...
Code Block |
---|
<servlet>
<servlet-name>jcaptcha</servlet-name>
<servlet-class>ImageCaptchaServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
{code}
And
{code} |
And
Code Block |
---|
<servlet-mapping>
<servlet-name>jcaptcha</servlet-name>
<url-pattern>/jcaptcha</url-pattern>
</servlet-mapping>
{code}
h1. The form
Provide a form containing the captcha challenge (the image) and an input text for the response
{code} |
The form
Provide a form containing the captcha challenge (the image) and an input text for the response
Code Block |
---|
<img src="/jcaptcha">
<input type='text' name='j_captcha_response' value=''>
{code}
h1. the validation routine
Handle the post (using a servlet, or whatever).
The validateCaptchaForId method will return true if the response is correct.
{code} |
the validation routine
Handle the post (using a servlet, or whatever).
The validateCaptchaForId method will return true if the response is correct.
Code Block |
---|
Boolean isResponseCorrect =Boolean.FALSE;
//remenber that we need an id to validate!
String captchaId = httpServletRequest.getSession().getId();
//retrieve the response
String response = httpServletRequest.getParameter("j_captcha_response");
// Call the Service method
try {
isResponseCorrect = CaptchaServiceSingleton.getInstance().validateResponseForID(captchaId,
response);
} catch (CaptchaServiceException e) {
//should not happen, may be thrown if the id is not valid
}
//do something according to the result!
{code}
h1. Want some more
{tip:title=Try customization and more integration}
Have a look to the modules provided to see how to integrate it with other frameworks :
* [Change the Captcha generation configuration]
* [Use JCaptcha with a Spring configuration|JCaptcha and the SpringFramework]
{tip} |
Want some more
Info | ||
---|---|---|
| ||
Have a look to the modules provided to see how to integrate it with other frameworks : |
Tip | ||
---|---|---|
| ||
Please put some code showing integration with a new framework in a child page of the How To |