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();
%>
分享到:
相关推荐
Struts2和Spring3是两种非常流行的Java Web开发框架,它们在企业级应用中被广泛使用。本实例结合这两种框架,构建了一个包含验证码功能的登录系统,旨在提供一个安全、可扩展的基础架构。 首先,Struts2是Apache...
随机彩色防识别验证码 内置管理员账户,可以创建、删除、修改用户,并查看用户列表和单个用户详情 普通用户账户,记录用户名和密码在SQL数据库中,支持用户头像上传 普通用户能实现发新帖、回帖、浏览帖子,但不...
1. 利用Java从大图中随机抠出一张小图,并在大图上给抠出小图的位置加阴影,然后把这两张图片返回给前端; 2. 前端获取图片,用户滑动小图到阴影的位置,获取小图滑动的距离,返回给Java后台进行校验; 3. 校验通过...
1. 生成随机验证码:通常包括数字和字母的组合,确保其难以被程序自动识别。 2. 保存验证码:将生成的验证码存储在服务器端,如Session中,以便后续验证。 3. 显示验证码:通过图像或者音频形式呈现给用户。 4. 验证...
在"验证码"部分,可能采用了Spring的AOP或者Struts2的拦截器来生成和校验随机验证码,以增加安全性,防止机器人自动注册。验证码通常由服务器生成并发送到客户端,然后在用户提交表单时进行比对,以确认是真人操作。...
7. **JSP图片验证**:这通常指的是创建一种安全机制,如生成随机的图片验证码,用户在提交表单前需正确输入显示的验证码。这可以防止自动脚本的恶意操作,提高网站安全性。 以上每个技术都有其独特的价值,它们共同...
本实例将探讨如何使用简单的Servlet生成加法验证码,并将其整合到Struts2、SSH2(Spring、Struts2、Hibernate)和Mybatis等流行框架中。这个实践教程将帮助开发者了解验证码的基本实现以及与主流框架的集成。 首先...
6. 开发实践:在实际开发中,可能需要创建一个独立的服务类来处理验证码的生成和验证,这个服务类可以通过Spring的依赖注入注入到Struts2的Action中。同时,为了用户体验,验证码的展示和验证应当做到实时和高效,...
验证码是一种防止机器自动操作的安全机制,通过显示一组随机生成的图像或文本,要求用户输入看到的内容以证明其是人类。这有效地阻止了恶意的自动登录尝试。验证码的实现通常结合了图像生成、扭曲处理和服务器端的...
在S2SH框架中,我们可以使用第三方库如 JCaptcha 或者自己编写逻辑来生成随机验证码图片,并将其与服务器端存储的验证码进行比较,验证用户输入的验证码是否正确,以此提高安全性。 接着,分页封装是大型Web应用中...
在实际应用中,Java验证码生成器可以集成到Web应用程序中,例如Spring MVC或Struts2框架中。开发者可以通过调用相关API,轻松地在网页上生成并显示验证码,同时服务器端会保存生成的验证码值,用于后续的验证。 在...
在验证码场景下,Servlet主要负责处理HTTP请求,生成随机验证码,并将其存储在服务器端,同时将验证码的图像发送给客户端显示。 1. **验证码生成**:验证码通常由一组随机的字母和数字组成,具有一定的长度和复杂度...
在这个项目中,虽然没有直接使用到所有这些技术,但可以看出开发者可能考虑了将验证码生成集成到更复杂的应用环境中,例如通过Servlet处理HTTP请求,使用Struts或Spring处理业务逻辑,而Hibernate则可能用于数据持久...
本项目基于Struts、Spring和Mybatis这三大经典Java Web框架,提供了一种灵活的方式来生成8位无重复的随机数,并确保每次生成的随机数都是唯一的。 首先,让我们来理解这三个框架的核心功能: 1. **Struts**:这是...
SSH(Struts2 + Spring + Hibernate)是一种常见的Java Web开发框架,它整合了三大开源框架,为开发者提供了高效、简洁的开发环境。在本源码示例中,我们将深入探讨SSH框架中的“标签”、“关系”和“验证码”这三个...
7. **集成到Web应用**:在Spring MVC、Struts2等常见Web框架中,可以方便地将kaptcha集成到登录或其他需要验证码的表单中,以增强安全性。 8. **安全考虑**:kaptcha的目的是抵御自动化工具,例如自动注册、恶意...
在Java编程语言中,用户注册和登录功能是任何应用程序的核心组成部分,而验证码的引入则可以增强...实际开发中,还需要结合具体的项目需求和框架,如Spring Boot、Struts或Spring MVC等,来进行更深入的设计和实现。
从给定的文件内容中,可以提取到的知识点包括:SSH框架下的随机数字验证码的生成和使用、JSP页面中验证码的集成方法、以及如何在后端Java代码中实现验证码的生成逻辑。 首先,SSH框架是Struts、Spring、Hibernate三...
7. **与Web框架兼容**:`jcaptcha`通常可以无缝集成到各种Java Web框架中,如Spring、Struts等,简化开发流程。 8. **性能优化**:考虑到验证码服务需要快速响应,`jcaptcha`库设计时会考虑性能优化,确保在高并发...
如果需要在SSH(Spring、Struts、Hibernate)框架下使用,只需稍作修改,将请求参数传递的方式调整即可。 验证码的核心原理是生成一个难以由机器识别的图像,通常包含随机组合的字母和数字。用户在看到验证码后需要...