This Java Captcha Example demonstrates you how to develop a captcha Servlet and use in your Struts 2 application.
Developing Struts 2 Captcha Application
In this section we are going to develop Captcha Servlet and then use the same to validate Struts 2 based web applications. We have developed a Servlet that generates Captcha image.
Let's see how our Captcha application works.
Working of the application
- captcha.jsp: This page contains the captcha image and one text field.
- User reads the image text and then enters in the "Code" text field. After entering the value in the text field, user clicks on the "Verify" command button.
- Then our Struts 2 action validates the user input and the session Captcha value. If user enters the correct image code in the text filed, then action forward to the "success.jsp" page. Otherwise, it gives an error and go to again the "captcha.jsp".
- 1. Index page
In the index.html we have added a link to captcha.jsp. User can click on this link to go to the captcha form.
-
<html>
<head>
<title>Capcha Validation</title>
<style>
a:link{ color:red; text-decoration:underline; }
a:visited{ color:red; text-decoration:underline; }
a:hover{ color:green; text-decoration:none; }
a:active{ color:red; text-decoration:underline; }
</style>
</head>
<body>
<table>
<tr><td><a href="captcha.jsp">Captcha Application</a></td></tr>
</table>
</body>
</html>
2. Captcha Page
The GUI of the application consists of Captcha page (captcha.jsp).
The captcha.jsp is used to display the valid code and a text box.
-
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Capcha Validation</title>
<style>
.errorMessage {
color: red;
font-size: 0.8em;
}
.label {
color:#000000;
}
</style>
</head>
<body>
<table>
<tr>
<td>
<h1>Captcha Validation</h1>
<s:form action="doCaptcha" method="POST">
<s:actionerror />
<img src="Captcha.jpg" border="0">
<s:textfield label="Code" name="j_captcha_response" size="20" maxlength="10"/>
<s:submit value="Verify" align="center" />
</s:form>
</td>
</tr>
</table>
</body>
</html>
The code :
<s:actionerror />
displays action errors and field validation errors.
The code <s:form action="doLogin" method="POST"> generates the html form for the application.
The code :
<img src="Captcha.jpg" border="0">
<s:textfield label="Code" name="j_captcha_response" size="20" maxlength="10"/>
The submit button is generated through <s:submit value="Verify" align="center" /> code.
3. Servlet Class
Develop a Servlet class "RoseIndiaCaptcha.java" to create a Captcha image. Here is the code of RoseIndiaCaptcha.java Servlet class:
package com.roseindiaCaptcha.servlet;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
import java.awt.*;
import java.util.*;
import java.awt.font.TextAttribute;
public class RoseIndiaCaptcha extends HttpServlet {
private int height=0;
private int width=0;
public static final String CAPTCHA_KEY = "captcha_key_name";
public void init(ServletConfig config) throws ServletException {
super.init(config);
height=Integer.parseInt(getServletConfig().getInitParameter("height"));
width=Integer.parseInt(getServletConfig().getInitParameter("width"));
}
protected void doGet(HttpServletRequest req, HttpServletResponse response)
throws IOException, ServletException {
//Expire response
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Max-Age", 0);
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = image.createGraphics();
Hashtable<TextAttribute, Object> map = new Hashtable<TextAttribute, Object>();
Random r = new Random();
String token = Long.toString(Math.abs(r.nextLong()), 36);
String ch = token.substring(0,6);
Color c = new Color(0.6662f, 0.4569f, 0.3232f);
GradientPaint gp = new GradientPaint(30, 30, c, 15, 25, Color.white, true);
graphics2D.setPaint(gp);
Font font=new Font("Verdana", Font.CENTER_BASELINE , 26);
graphics2D.setFont(font);
graphics2D.drawString(ch,2,20);
graphics2D.dispose();
HttpSession session = req.getSession(true);
session.setAttribute(CAPTCHA_KEY,ch);
OutputStream outputStream = response.getOutputStream();
ImageIO.write(image, "jpeg", outputStream);
outputStream.close();
}
}
4.Mapping for Servlet class in web.xml
<servlet>
<servlet-name>Captcha</servlet-name>
<display-name>Captcha</display-name>
<servlet-class>com.roseindiaCaptcha.servlet.RoseIndiaCaptcha</servlet-class>
<init-param>
<description>passing height</description>
<param-name>height</param-name>
<param-value>30</param-value>
</init-param>
<init-param>
<description>passing height</description>
<param-name>width</param-name>
<param-value>120</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Captcha</servlet-name>
<url-pattern>/Captcha.jpg</url-pattern>
</servlet-mapping>
5.Success page
After successful validation page transfer to the "success.jsp"
<html>
<head>
<title>Capcha Validation</title>
</head>
<body>
<table><tr><td><h1>You are Succesfully Validate</h1></td></tr></table>
</body>
</html>
6.Developing Action Class
Now let's develop the action class to handle the Captcha validation request.
The code String c= (String)session.getAttribute(RoseIndiaCaptcha.CAPTCHA_KEY) is used to get the Captcha value stored in session and then validate it with the user input. Here is the code of the Action class.
package com.roseindiaCaptcha.action;
import com.opensymphony.xwork2.ActionSupport;
import java.util.Date;
import javax.servlet.http.*;
import javax.servlet.*;
import com.opensymphony.xwork2.ActionContext;
import com.roseindiaCaptcha.servlet.*;
public class CaptchaAction extends ActionSupport {
public String execute() throws Exception {
HttpServletRequest request = (HttpServletRequest)
ActionContext.getContext().get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);
Boolean isResponseCorrect = Boolean.FALSE;
javax.servlet.http.HttpSession session = request.getSession();
String parm = request.getParameter("j_captcha_response");
String c= (String)session.getAttribute(RoseIndiaCaptcha.CAPTCHA_KEY) ;
if(!parm.equals(c) ){
addActionError("Invalid Code! Please try again!");
return ERROR;
}else{
return SUCCESS;
}
}
}
7.Configuring action mapping (in struts.xml)
Now we will create action mapping in the struts.xml file. Here is the code to be added in the struts.xml:
<action name="doCaptcha" class="com.roseindiaCaptcha.action.CaptchaAction">
<result name="error">captcha.jsp</result>
<result>success.jsp</result>
</action>
In the above mapping the action "doCaptcha" is used to validates the user using action class (CaptchaAction.java).
Output :
If invalid code the error message is display.
After successfully validation message :
分享到:
相关推荐
Struts2作为一款流行的Java Web应用框架,支持多种方式来实现验证码功能。本文将详细介绍如何在Struts2项目中生成并显示验证码。 #### 二、核心概念 1. **验证码**:一种用于区分用户是人还是计算机程序的技术手段...
Struts验证码插件JCaptcha4Struts2是一个用于Java Web应用的安全组件,旨在防止自动机器人或恶意用户通过自动化脚本进行非法操作,如批量注册、密码重置等。该插件利用了JCaptcha(Just Another CAPTCHA)库,提供了...
"最新的struts2验证码.rar"很可能包含了有关如何在Struts2框架下实现验证码功能的示例代码或配置文件。 Struts2验证码的实现通常涉及到以下几个关键知识点: 1. **验证码生成**:验证码通常由随机生成的一串字符或...
本示例提供了使用Struts2框架实现验证码功能的完整代码,全部采用Java语言编写。 首先,我们需要了解Struts2框架。Struts2是一个基于MVC(Model-View-Controller)设计模式的开源Java Web框架,它简化了构建企业级...
2. **渲染验证码图片**:生成的验证码字符串需要转换为可视化的图像。这通常涉及到将每个字符绘制到一个图像上,然后添加一些噪声、扭曲或其他视觉干扰以增加难度。生成的图像应当在服务器端生成,并以HTTP响应的...
Struts和Ajax是两种在Java Web开发中广泛使用的技术,它们在构建动态、交互式的用户界面方面发挥着关键作用。...这是一个典型的Java Web开发示例,展示了如何利用现代技术栈实现高效、安全的用户交互。
首先,`web08.rar`可能包含了一个基于Web的登录验证码示例。Web验证码通常由服务器生成并显示在HTML页面上,用户需要输入图片或音频中显示的字符或数字。这个例子可能涵盖了以下知识点: 1. **Servlet**:用于处理...
通常,验证码的生成和验证需要后端支持,例如通过Struts2的Action类生成验证码图片并存储其值,然后在提交表单时比较用户输入的验证码与服务器端保存的值是否一致。 Struts2是一个基于MVC(Model-View-Controller)...
Java作为广泛应用的编程语言,提供了丰富的库和框架来实现验证码功能,例如在Struts2框架中的实现。 Struts2是一个强大的MVC(Model-View-Controller)框架,它极大地简化了Java Web应用程序的开发。在Struts2中...
在这个特定的示例中,我们看到如何使用Struts2来实现一个简单的6位数字验证码程序。验证码的主要目的是验证用户是否是人类,防止自动化机器人进行恶意操作,如注册、登录等。 首先,`login.jsp`页面包含一个...
首先,"jcaptcha4struts2-demo-2.0.1.zip"是一个包含Jcaptcha4Struts2验证码插件示例的压缩包,版本为2.0.1。这个DEMO旨在帮助开发者快速理解和应用Jcaptcha4Struts2,为初学者提供了一个基础入门级的学习资源。 ...
2. 前端获取图片,用户滑动小图到阴影的位置,获取小图滑动的距离,返回给Java后台进行校验; 3. 校验通过,返回校验通过编号; 4. 前端调登录接口,把账号、密码、和校验编号传到Java后台进行登录。 实现: 1. ...
本资源"用Struts实现验证码.rar"提供了一个使用Struts框架实现验证码功能的示例,对于学习Struts和Web安全开发的初学者来说非常有价值。 验证码的核心目的是通过生成一种人类可以轻易识别但计算机难以自动解析的...
在"28_Struts2ImgCode"这个文件名中,虽然没有实际的文件内容,但我们可以推测它可能包含了与Struts2和图像验证码相关的代码示例。在HTTPS环境中,如果涉及到图片验证码,需要注意的是,验证码图片也需要通过HTTPS...
在实际应用中,你可能需要将这个Servlet集成到Spring Boot、Struts2或其他Java Web框架中,以适应项目的需求。同时,验证码的安全性也是一个重要的考虑因素,例如,可以考虑增加更复杂的字符集、增加字符数量、使用...
Java验证码组件Jcaptcha是用于生成安全、动态的图像验证码的工具,主要目的是为了防止自动化的机器人或恶意软件在Web应用程序中进行非法操作,如批量注册、登录等。它通过生成随机字符组合并扭曲图像背景来增加人眼...
SSH是三个开源Java框架的缩写,分别是Struts2、Hibernate3和Spring2.5,它们常被用于构建企业级的Web应用程序。SSH框架的整合提供了模型-视图-控制器(MVC)架构,持久层管理和依赖注入等功能,极大地提高了开发效率...
在提供的`test-demo`压缩包中,可能包含了实现上述功能的源代码示例,包括Struts2的Action类、验证码生成类以及相关的配置文件。读者可以参考这些代码加深理解,或者直接在自己的项目中应用和扩展。
Struts2是一个强大的Java web应用程序框架,用于构建和维护可扩展、易于维护的MVC(模型-视图-控制器)架构的应用程序。基于Struts2的个人信息管理系统是使用这一框架来设计和实现的一个典型示例,它涵盖了用户管理...