How to Create A Simple Captcha Using Java Servlet
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.
4 Comments
Tadeu
about 6 years agoThanks! It works perfectly. Easy to verify if typed code matches to image.
Replyedwin
about 5 years agohi Tadeu, glad it can help
Drakonoved
about 3 years agothere is a little better variant
ReplyThanh Tung
about 4 months agoThanks you !
Reply