现在有不少网站在用户填写表单时,同时要求填写验证码,验证码的一个目的就是防范一些恶意的网站下载软件,这些软件能通过遍历链接而将网站的所有网页下载。还可以防止用户不经过本网站的页面而使用网站的资源。所以现在有不少网站都使用了验证码技术,验证码通常是一个在WEB服务器上生成的随机字符串,同时以某种方式保存起来,比如保存到与当前的Session中,然后在用户提交网页时与用户输入的验证比较是否一致,然而如果直接以明文的方式,还是不能防范一些功能较强的自动填写表格的软件。所以一般将验证码以图片的形式显示出来,同时可以将在图片中显示的字符串进行一些处理,比如使用旋转字符,添加背景纹理等技术以增大被软件识别的难度。下面简要介绍一下如果实现这种验证码:首先实现一个servlet用来生成图片(当然也可以用jsp实现):
package untitled7;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import com.sun.image.codec.jpeg.*;
import java.awt.*;
import com.sun.image.codec.jpeg.*;
import java.awt.image.BufferedImage;
import java.awt.image.DataBuffer;
import java.awt.geom.GeneralPath;
import javax.swing.*;
import java.math.*;
public class Servlet1
extends HttpServlet ...{
//Process the HTTP Get request
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException ...{
response.setContentType(request.getContentType());
response.setContentType("image/jpeg"); //必须设置ContentType为image/jpeg
int length = 4; //设置默认生成4个数字
Date d = new Date();
long lseed = d.getTime();
java.util.Random r = new Random(lseed); //设置随机种子
if (request.getParameter("length") != null) ...{
try ...{
length = Integer.parseInt(request.getParameter("length"));
}
catch (NumberFormatException e) ...{
}
}
StringBuffer str = new StringBuffer();
for (int i = 0; i < length; i++) ...{
str.append(r.nextInt(9)); //生成随机数字
}
//可以在此加入保存验证码的代码
//创建内存图像
BufferedImage bi = new BufferedImage(40, 16, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bi.createGraphics();
g.clearRect(0, 0, 16, 40);
g.setColor(Color.RED);
g.drawString(str.toString(), 4, 12);
try ...{
//使用JPEG编码,输出到response的输出流
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response.
getOutputStream());
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
param.setQuality(1.0f, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(bi);
}
catch (Exception ex) ...{
}
}
}
然后在需求显示验证码的加入以下代码就可以了
<img alt="" src="/WebModule1/servlet1" width="40" height="16"/> |
分享到:
相关推荐
总的来说,这个Java Servlet验证码实现涵盖了Java Web开发的基础知识,包括Servlet生命周期、HTTP会话管理、图像处理以及随机数生成。理解这个过程对于提升Web应用的安全性是非常有帮助的。通过这个小例子,开发者...
10. **安全性考虑**:虽然这种简单的验证码生成方式能防止一些基本的自动化攻击,但对于更复杂的爬虫或自动化工具,可能需要更高级的验证码技术,如滑动验证码、点击验证码、基于行为的验证码等。 总结来说,`...
本文将详细解析一个具体的JSP Servlet验证码实现案例。 #### 二、核心概念 1. **Servlet**:Servlet是一种基于Java的技术,用于扩展应用程序服务器的功能,处理客户端请求,并向客户端发送响应。它主要用于构建...
由于这个验证码实现是小巧且便于移植的,你可以将源代码复制到任何支持Java Web的环境中,例如Tomcat、Jetty等应用服务器。只需确保将源代码编译成对应的类文件,并将其放置在服务器的相应目录下,同时调整Web应用...
jsp+servlet编写的验证码程序是一个简单的验证码生成程序,使用jsp和servlet技术来生成验证码。该程序使用了java.awt包来生成随机颜色和随机字符,并使用java.awt.image.BufferedImage类来生成验证码图片。该程序...
本教程将深入讲解如何使用Servlet生成随机验证码。 首先,让我们了解Servlet的基本概念。Servlet是一个Java类,遵循Servlet API规范,它被部署在Web服务器上,用于扩展服务器的功能,处理来自客户端(如浏览器)的...
在本教程中,我们将探讨如何使用Servlet实现一个简单的登录验证系统。 首先,理解Servlet的生命周期是关键。Servlet在服务器启动时并不自动加载,而是当首次接收到请求时被创建。然后,它会经历初始化、服务和销毁...
本文将详细介绍 Java Servlet 验证码生成机制的实现过程。 验证码生成机制 验证码生成机制的主要目的是生成一个随机的、难以被机器人识别的验证码,以防止机器人的恶意攻击。在 Java Servlet 中,可以使用随机数...
总的来说,这个Servlet验证码实现结合了Java图形处理、随机数生成以及HTTP请求处理等技术,提供了一种基础但实用的网站安全机制。然而,对于更高级的安全需求,可以考虑使用更复杂的验证码系统,例如滑动验证码、...
在这个“jsp 最简单获取动态验证码例子”中,我们将探讨如何在JSP中生成并显示一个简单的动态验证码。 验证码的主要目的是防止自动机器人或恶意脚本进行非法操作,例如防止垃圾邮件、注册虚假账号等。动态验证码则...
JavaWeb Servlet 生成简单验证码详解 JavaWeb Servlet 生成简单验证码是指通过 Java 语言和 Servlet 技术生成的验证码,主要用于防止机器人攻击和自动提交表单。下面是关于 JavaWeb Servlet 生成简单验证码的详细...
通过以上步骤,我们可以实现一个简单的Java JSP验证码功能。这个过程涉及到Java基础、图像处理、HTTP会话管理等多个方面,是Web开发中常见且重要的安全机制。在实际应用中,可以根据项目需求进行定制和扩展,例如...
本实例将探讨如何使用简单的Servlet生成加法验证码,并将其整合到Struts2、SSH2(Spring、Struts2、Hibernate)和Mybatis等流行框架中。这个实践教程将帮助开发者了解验证码的基本实现以及与主流框架的集成。 首先...
本项目是基于Servlet技术实现的一个简单的验证码生成功能,旨在为开发者提供一个基础的参考实现。 在Java Web开发中,Servlet是服务器端的小型程序,用于处理客户端(浏览器)的请求并返回响应。验证码生成通常涉及...
总的来说,这个验证码Servlet程序是一个简单的实现,用于生成基于图片的验证码。它结合了Java Servlet技术、图形处理以及随机数生成,提供了基本的网页安全防护。在实际应用中,还可以根据需求进行优化,比如增加更...
本篇将介绍如何使用Servlet来实现一个简单的验证码功能。 验证码的主要任务是生成一张包含随机字符串的图片,并将该字符串作为验证码保存到用户的会话(session)中。当用户提交表单时,系统会验证用户输入的验证码...
下面是一个简单的JSP实现验证码功能的代码示例: ```jsp <%@ page import="javax.servlet.http.HttpSession" %> // 生成随机验证码 Random rand = new Random(); String code = ""; for (int i = 0; i...
下面是一个简单的 Java 验证码实现示例: ```java package model; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.IOException; import java.io....
下面我们将详细讨论如何使用Java来创建一个简单的基于Servlet的图形验证码,并实现不刷新页面就能更新验证码的功能。 首先,我们看到代码中定义了一个名为`CheckCodeServlet`的类,它继承自`HttpServlet`。`...
在本实例中,我们将探讨如何使用Java仿照Servlet的方式生成验证码。验证码的主要目的是防止机器人或恶意自动化程序对网站进行非法操作,例如防止恶意注册、垃圾邮件发送等。 生成验证码的关键在于创建一个随机的...