On this article im going to create a simple image captcha that will show a 5-random alphanumeric letters, im using SimpleCaptha library to help me creating images and validating user’s input.
First is a simple java servlet, it will build random images and store its value on httpsession.
package com.edw.captcha;
import java.awt.Color;
import java.awt.Font;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import nl.captcha.Captcha;
import nl.captcha.backgrounds.GradiatedBackgroundProducer;
import nl.captcha.servlet.CaptchaServletUtil;
import nl.captcha.text.renderer.DefaultWordRenderer;
public class EdwCaptcha extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
List<Color> colors = new ArrayList<Color> ();
colors.add(Color.black);
colors.add(Color.red);
List<Font> fonts = new ArrayList<Font>();
fonts.add(new Font("Arial", Font.ITALIC, 40));
Captcha captcha = new Captcha.Builder(120, 50)
.addText(new DefaultWordRenderer(colors, fonts))
.addBackground(new GradiatedBackgroundProducer(Color.white, Color.white))
.gimp()
.addBorder()
.build();
// display the image produced
CaptchaServletUtil.writeImage(response, captcha.getImage());
// save the captcha value on session
request.getSession().setAttribute("simpleCaptcha", captcha);
}
}
And now im registering my servlet on my web.xml,
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<servlet>
<servlet-name>Captcha</servlet-name>
<servlet-class>com.edw.captcha.EdwCaptcha</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Captcha</servlet-name>
<url-pattern>/Captcha.jpg</url-pattern>
</servlet-mapping>
</web-app>
Here is the result image generated from my servlet,

You can validate the submitted captcha values by comparing it with the values that you store in httpsession.
Thanks! It works perfectly. Easy to verify if typed code matches to image.
hi Tadeu, glad it can help
there is a little better variant
Thanks you !