很多新手对图片验证码不是很了解,最近自己也与做这个功能,于是决定把自己的用个代码给大家分享一下,接下来我们就来看看一个实例吧。其中包括jsp实现的动态验证码,以每次请求都随即生成5个数字为例,用法就是在JSP页面中取出该验证码的值,用session保存的,进行判断比较就可以了。工程架构如图:
注意一点,其中commons-lang.jar就本项目需要加入,可能因为不同写法,此包可有可无,特此说明。同时页面使用了jquery,需要引入jquery-1.3.2.min.js文件。
首先,先写一个动态图片生成的Servlet类--AuthCode.java,当然也可以使用Struts来完成这个功能,代码如下:
package com.fz.cloudsync.web.config;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import org.apache.commons.lang.RandomStringUtils;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class AuthCode extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* Constructor of the object.
*/
public AuthCode() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to
* post.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
int width = 75;
int height = 25;
// 取得一个5位随机字母数字字符串
String s = RandomStringUtils.random(5, true, true);
// 保存入session,用于与用户的输入进行比较.
// 注意比较完之后清除session.
HttpSession session = request.getSession(true);
session.setAttribute("authCode", s);
response.setContentType("images/jpeg");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
ServletOutputStream out = response.getOutputStream();
BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
// 设定背景色
g.setColor(getRandColor(200, 250));
g.fillRect(0, 0, width, height);
// 设定字体
Font mFont = new Font("华文新魏", Font.HANGING_BASELINE, 18);// 设置字体
g.setFont(mFont);
// 画边框
// g.setColor(Color.BLACK);
// g.drawRect(0, 0, width - 1, height - 1);
// 随机产生干扰线,使图象中的认证码不易被其它程序探测到
g.setColor(getRandColor(160, 200));
// 生成随机类
Random random = new Random();
for (int i = 0; i < 155; i++) {
int x2 = random.nextInt(width);
int y2 = random.nextInt(height);
int x3 = random.nextInt(12);
int y3 = random.nextInt(12);
g.drawLine(x2, y2, x2 + x3, y2 + y3);
}
// 将认证码显示到图象中
g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
// 第一位指随机数,第二位指随机数左右位移,第三位指随机数上下位移
g.drawString(s, 10, 18);
// 图象生效
g.dispose();
// 输出图象到页面
ImageIO.write((BufferedImage) image, "JPEG", out);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// 给定范围获得随机颜色
private 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);
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException
* if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}
}
其次,JSP页面--index.jsp代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<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">
-->
<script type="text/javascript" src="<%=path %>/js/jquery-1.3.2.min.js"></script>
<script language="javascript" type="text/javascript">
function changeImg(){
$("#authCode").attr("src","<%=path %>/servlet/AuthCode?d="+new Date().valueOf());
}
</script>
</head>
<body>
<center>
<img src="<%=path %>/servlet/AuthCode" alt="验证码" id="authCode" onclick="changeImg()" />
<a href="#" onclick="changeImg()">看不清,换一张!</a>
</center>
</body>
</html>
再次,配置文件web.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>AuthCode</servlet-name>
<servlet-class>com.fz.cloudsync.web.config.AuthCode</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AuthCode</servlet-name>
<url-pattern>/servlet/AuthCode</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
最后,只需要在tomcat下,部署本工程就可以了,效果如下:
结束语:希望这篇关于AuthCode的博文可以给初学者带来较大帮助,对于代码不足之处,还请多多谅解,给予指出!附源代码,下载地址:http://dl.iteye.com/topics/download/e476742c-79c4-315d-9675-314273a83741。
- 大小: 25.3 KB
- 大小: 4.2 KB
分享到:
相关推荐
这种做法的好处是,可以在不离开JSP页面的情况下完成验证码的生成和输出,简化了开发流程。然而,考虑到性能和代码组织,实际项目中更推荐使用Servlet来处理这类任务,因为它们更适合处理I/O和控制HTTP响应。
在这个例子中,`VCodeServlet`被用来动态生成验证码图片。用户在输入用户名、密码后,还需输入显示的验证码。表单提交到`login.jsp`,在那里我们将比较用户输入的验证码与服务器保存的验证码是否一致。 在`login....
### JSP页面验证码生成图片详解 #### 一、概述 在网站登录或注册过程中,为了防止恶意登录或机器人操作,通常会使用验证码机制。本文档详细介绍了一种利用JSP技术生成验证码图片的方法。该方法通过Java后端动态...
在JSP页面的HTTP响应中,我们需要设置正确的Content-Type(通常是"image/jpeg"或"image/png"),然后使用ImageIO.write方法将BufferedImage对象转换为流并写入响应,这样浏览器就能显示这个验证码图片。 另一方面,...
### JSP 页面最简单的验证码实现解析 #### 一、概述 在现代Web应用开发中,验证码作为一种简单有效的安全措施被广泛应用于用户登录、表单提交等场景,用于防止恶意脚本或机器人自动提交数据。本文将详细介绍一个...
1. JSP 验证码生成:使用 JSP 生成验证码,包括生成验证码图片、将验证码存入 SESSION 等。 * 使用 JSP 生成验证码图片,通过 BufferedImage 和 Graphics 实现验证码图片的生成。 * 将验证码存入 SESSION,以便...
图片验证码在网页应用中主要用于防止恶意自动化脚本的攻击,它要求用户输入显示在图片中的随机字符或数字以验证其是人类操作。本文将深入解析JSP中实现图片验证码的主要技术和步骤。 首先,我们需要理解如何生成...
为了实现验证码的刷新功能,可以在JSP页面中使用Servlet来动态生成验证码图片。Servlet接收请求,生成验证码文本(存储在session中),然后创建并返回验证码图片。JSP页面通过AJAX请求刷新Servlet,每次请求都会得到...
在Java Web开发中,JSP(JavaServer Pages)是常用的服务器端脚本语言,可以用来动态生成验证码。本文将详细讲解如何使用JSP来实现这一功能。 首先,我们要理解验证码的基本原理。验证码通常包含一串随机生成的字符...
7. **将验证码和图片发送到客户端**:在JSP页面中,将生成的验证码字符串存储在session中,同时将图片以流的形式输出到HTTP响应中。客户端接收到图片后显示在网页上,用户输入看到的验证码。 8. **验证用户输入**:...
在JSP页面上,我们可以使用`<img>`标签加载这个图像,让用户看到验证码。 4. **用户输入验证**:用户在登录表单中输入看到的验证码,然后提交表单。在JSP的后台处理代码中,我们会比较用户输入的验证码与之前保存在...
**JSP文件动态验证码详解** 在网页开发中,验证码(CAPTCHA)是一种广泛采用的安全机制,用于防止自动机器人或恶意程序进行非法操作,如垃圾邮件发送、账户注册等。JSP(JavaServer Pages)是Java平台上的一种...
在Web开发中,JSP(JavaServer Pages)可以用来创建动态验证码图片。本文将详细介绍如何使用JSP来实现一个简单的数字验证码图片的生成。 首先,我们要理解验证码的基本原理。验证码通常包含一串随机生成的字符或...
3. **JSP页面显示验证码**: - 在登录页面的JSP文件中,我们需要一个img标签来显示验证码。src属性应指向Servlet的URL,如`<img src="/randomimage" id="captchaImg">`。 - 为了保持会话状态,我们还需要在服务器...
在Java Web开发中,JSP(JavaServer Pages)常被用来生成这种动态的图片验证码。下面我们将深入探讨如何使用JSP来创建一个简单的图片验证码。 首先,我们需要理解验证码的基本原理。验证码通常由一串随机生成的字母...
本文将深入探讨一个基于JSP、Servlet、Ajax和jQuery的漂亮图片验证码实现,以及这些技术如何协同工作来创建一个有效的安全机制。 首先,`JSP(JavaServer Pages)`是Java的一种动态网页技术,它允许开发人员在HTML...
【标题】"jsp图片验证码源代码 自由模块"涉及的知识点主要集中在Java服务器页面(JSP)技术、图片验证码的实现以及模块化的编程思想。验证码通常用于防止自动化程序(如机器人)对网站进行恶意操作,例如批量注册、...
- **展示验证码**:在JSP页面上,使用`<img>`标签加载Servlet生成的GIF验证码。 - **用户输入验证**:用户输入验证码后,提交表单时,服务器会对比Session中的验证码内容和用户输入,如果匹配则验证成功,否则提示...
1. **事件监听**:在JSP页面上,为验证码图片设置一个点击事件监听器,例如使用JavaScript或者jQuery。 2. **发送Ajax请求**:当用户点击图片时,通过Ajax异步向服务器发送请求,请求更换验证码。 3. **Servlet...
- 视图解析,可能是JSP或Thymeleaf等,用于展示登录页面和验证码图像。 - 相关的Service和DAO层,用于处理登录逻辑和数据库操作。 通过以上步骤和组件,SSM框架可以成功地实现登录验证码功能,为Web应用提供了一道...