struts-config.xml
<form-bean name="checkForm"
type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="rand" type="java.lang.String" />
</form-bean>
<action
attribute="checkForm"
input="/check/check.jsp"
name="checkForm"
path="/check"
scope="request"
validate="true"
type="com.yourcompany.struts.action.CheckAction">
<forward
name="ok" path="/check/checkok.jsp" />
</action>
validation.xml
<form
name="checkForm">
<field property="rand" depends="required">
<arg key="checkForm.rand"/>
</field>
</form>
spring
config
<bean name="/check"
class="com.yourcompany.struts.action.CheckAction"/>
checkAction.java
public class CheckAction
extends Action {
/*
* Generated Methods
*/
/**
* Method execute
* @param
mapping
* @param form
* @param request
* @param response
*
@return ActionForward
*/
public ActionForward execute(ActionMapping
mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse
response) {
DynaValidatorForm checkForm = (DynaValidatorForm) form;// TODO
Auto-generated method stub
/*HttpSession
session=request.getSession();
String strrand =
(String)session.getAttribute("rand");
session.setAttribute("rand",
strrand);*/
return
mapping.findForward("ok");
}
}
check.jsp
<%@ page language="java"
pageEncoding="ISO-8859-1"%>
<%@ taglib
uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%>
<%@
taglib uri="http://jakarta.apache.org/struts/tags-html"
prefix="html"%>
<html>
<head>
<title>JSP
for DynaValidatorForm form</title>
<meta http-equiv="Content-Type"
content="text/html; charset=gb2312">
<META HTTP-EQUIV="Pragma"
CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control"
CONTENT="no-cache">
<META HTTP-EQUIV="Expires"
CONTENT="0">
</head>
<body>
<html:form
action="/check">
<td><img border=0
src="check/image.jsp"></td>
<html:text
property="rand"/><html:errors
property="rand"/><br/>
<html:submit/><html:cancel/>
</html:form>
</body>
</html>
checkok.jsp
<%@ page language="java"
import="java.util.*" pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="pragma" content="no-cache">
<meta
http-equiv="cache-control" content="no-cache">
<meta
http-equiv="expires" content="0">
<meta http-equiv="keywords"
content="keyword1,keyword2,keyword3">
<meta http-equiv="description"
content="This is my page">
<!--
<link rel="stylesheet"
type="text/css" href="styles.css">
-->
</head>
<body>
<%
String rand =
(String)session.getAttribute("rand");
String input =
request.getParameter("rand");
if (rand.equals(input))
{
%>
<font color=green>OK</font>
<%
} else
{
%>
<font color=red>FAIL</font>
<%
}
%>
</body>
</html>
image.jsp
<%@ page language="java"
import="java.util.*" %>
<%@ page contentType="image/jpeg"
import="java.awt.*,java.awt.image.*,javax.imageio.*" %>
<%@ page
import="java.io.OutputStream" %>
<%!
Color getRandColor(int fc,int
bc){
Random random = new Random();
if(fc>255)
fc=255;
if(bc>255) bc=255;
int
r=fc+random.nextInt(bc-fc);
int
g=fc+random.nextInt(bc-fc);
int
b=fc+random.nextInt(bc-fc);
return new Color(r,g,b);
}
%>
<%
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",
0);
int width=60, height=20;
BufferedImage image
= new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
OutputStream
os=response.getOutputStream();
Graphics g = image.getGraphics();
Random random = new Random();
g.setColor(getRandColor(200,250));
g.fillRect(0, 0,
width, height);
g.setFont(new Font("Times New
Roman",Font.PLAIN,18));
g.setColor(getRandColor(160,200));
for (int
i=0;i<155;i++)
{
int x = random.nextInt(width);
int y =
random.nextInt(height);
int xl = random.nextInt(12);
int
yl = random.nextInt(12);
g.drawLine(x,y,x+xl,y+yl);
}
String sRand="";
for (int
i=0;i<4;i++){
String rand=String.valueOf(random.nextInt(10));
sRand+=rand;
g.setColor(new
Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
g.drawString(rand,13*i+6,16);
}
session.setAttribute("rand",sRand);
g.dispose();
ImageIO.write(image,
"JPEG",os);
os.flush();
os.close();
os=null;
response.flushBuffer();
out.clear();
out
= pageContext.pushBody();
%>
分享到:
相关推荐
在Web开发中,验证码(CAPTCHA)是一种防止机器自动操作的技术,它要求用户输入图片上显示的一串随机字符,以此来验证用户是人类而非机器人。在Struts2中生成验证码可以帮助提升网站的安全性,防止恶意注册、自动...
### Struts2 生成验证码知识点解析 #### 一、引言 在Web应用程序开发中,验证码是一种常见的安全机制,用于防止自动化的恶意攻击,如垃圾邮件发送或非法登录尝试等。Struts2作为一款流行的Java Web应用框架,支持...
它可能会创建一个`ByteArrayOutputStream`来存储图像数据,使用`ImageIO`和`ImageOutputStream`来绘制随机字符串到图像上,然后返回一个`ByteArrayInputStream`,这个流将被Struts2框架用于响应HTTP请求。...
我们可以使用一个`<img>`标签来显示验证码图片,图片的src属性指向一个Struts2 Action,该Action负责生成并返回验证码的图片。图片可以通过将验证码字符串转换为像素并绘制到图像上实现。 4. **配置Struts2 Action*...
Struts2图片验证码是一种常用的网络安全措施,用于防止自动化的机器人或恶意软件进行非法操作,如用户注册、登录等。在Web应用中,验证码通常由随机生成的一串字符组成,显示在图片上,用户需要正确输入这些字符才能...
2. **随机颜色生成**:`createsRandomColor()`方法用于生成随机颜色,以便在验证码图片上使用。 3. **图像创建**:`createImage()`方法负责创建一个包含验证码字符串的图像。首先,创建一个指定大小的`BufferedImage...
在Struts2框架下实现验证码功能,可以帮助提升用户体验和系统安全性。以下将详细讲解如何在Struts2中创建前端注册验证码。 首先,验证码的实现通常包括两个主要部分:后端生成验证码和前端展示及验证。 1. **后端...
下面我们将深入探讨如何在Struts2框架中创建和使用图片验证码。 首先,验证码的基本原理是生成一段随机的、难以通过机器识别的文字或数字,并将其显示在图片上。用户需要正确输入这段文字或数字以证明他们是人类。...
基于Struts2的验证码生成就是将这一功能集成到Struts2框架中的过程。 验证码的主要目的是验证用户是人类而非机器,通常通过显示一个随机生成的图像,要求用户输入图像中显示的字符来实现。在基于Struts2的验证码...
2. **创建Action类**: 创建一个新的Java类,继承自`org.struts2.interceptor.SessionAware`接口,以便可以使用session来存储验证码。这个类将包含生成验证码的方法,以及处理用户提交验证的逻辑。 3. **生成中文...
- 使用Java的`java.awt`和`javax.imageio`库生成随机的图形验证码。可以创建一个`BufferedImage`对象,设置其宽度和高度,然后使用`Graphics2D`对象在图像上绘制随机颜色的背景、随机分布的线条以及随机生成的字符...
1. **生成随机验证码**:首先,我们需要创建一个服务或者Action,生成一个随机字符串作为验证码。这个字符串可以包含字母、数字,甚至符号,长度可以根据需求来设定。生成的验证码通常要存储在一个会话(session)...
首先,让我们来了解一下Struts+jsp版的随机验证码实现。Struts是一个开源的MVC(Model-View-Controller)框架,它简化了Java Web应用的开发。在Struts中,我们可以创建一个Action类来处理用户请求,并在这个Action中...
在这个“使用struts2.0实现的验证码功能”项目中,我们将深入探讨如何利用Struts2.0来构建一个安全的登录页面,其中包括验证码的生成与验证。 验证码是一种防止恶意自动化程序(如机器人或爬虫)进行非法操作的安全...
1. **生成随机字符串**:验证码通常由4-6个随机字符(字母、数字)组成,可以使用Java的`Random`类生成这些字符并拼接成字符串。 2. **图像绘制**:将生成的字符串绘制到一张图片上。这可以通过Java的`Graphics2D`...
Struts2验证码是一种用于增强网站安全性的重要机制,它主要用于防止恶意自动化的机器人或者爬虫程序进行非法操作,比如批量注册、频繁登录等。在本项目中,开发者自定义了一个基于Struts2框架的验证码功能,使得...
验证码通常由一串随机生成的字符或数字组成,用户需要在输入框中正确输入才能完成登录。这样可以确保只有具备人类识别能力的用户才能进行操作,增加了系统的安全性。 实现这个实例时,首先需要配置Struts2和Spring3...
本资源"用Struts实现验证码.rar"提供了一个使用Struts框架实现验证码功能的示例,对于学习Struts和Web安全开发的初学者来说非常有价值。 验证码的核心目的是通过生成一种人类可以轻易识别但计算机难以自动解析的...
在本项目中,“仿CSDN样式(Struts2中文验证码源代码)”是为了实现类似CSDN登录页面的中文验证码功能,这在防止恶意机器人自动登录或注册时非常有用。 验证码的主要作用是验证用户是否为真人,通过显示一组随机生成...
在Struts2中,可以使用Java的Random类或其他库(如Apache Commons Lang的RandomStringUtils)来生成验证码的内容,然后将其存储在Session中以便后续验证。 2. **视图展示**:验证码需要显示在用户界面上,这可以...