package util;
import java.util.*;
import java.io.*;
import java.awt.*;
import java.awt.image.*;
import javax.servlet.*;
import javax.servlet.http.*;
import com.sun.image.codec.jpeg.*;
/*
* 生成验证码图片
*/
public class ValidateCode extends HttpServlet
{
private Font imgFont=new Font("宋体",Font.BOLD,16);//设置字体
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{
doGet(request,response);
}
//设置浏览器不要缓存此图片
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
/*
* 在给定范围内获得随机颜色
*/
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);
}
/////////////////////////////////////////////////////////////////////////
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException
{
String strCode =""; //验证码(字符串形式)
int intCode =0; //验证码(数字形式)
Random random = new Random();//随机类
//生成随机四位数字
intCode = (new Random()).nextInt(9999);
if(intCode<1000)
{
intCode+=1000;
}
//将数字转化为字符串
strCode=intCode+"";
/*
* 绘图
*/
response.setContentType("image/gif");
//获得servlet输出流
ServletOutputStream servletOutputStream =response.getOutputStream();
//创建表示图像的对象(参数是:宽、高、图片类型)
BufferedImage image=new BufferedImage(60,25,BufferedImage.TYPE_INT_RGB);
//创建表示图形上下文的对象
Graphics graph=image.getGraphics();
//设置此图形上下文的颜色
graph.setColor(Color.blue);
//设定矩形的横、纵坐标,及宽、高
graph.fillRect(1,1,48,18);
//将此图形上下文的字体设置为指定字体(参数为Font类型)
graph.setFont(imgFont);
//随机产生10条干扰线,使图象中的认证码不易被其它程序探测到
graph.setColor(getRandColor(160,200));
for (int i=0;i<10;i++)
{
int x = random.nextInt(85);
int y = random.nextInt(20);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
//在此图形上下文的坐标系统中,使用当前颜色在点 (x,y) 和 (x1,y1) 之间画一条线
graph.drawLine(x,y,x+xl,y+yl);
}
//分解验证码字符串
char c;
for(int i=0;i<4;i++)
{
//返回验证码字符串指定索引处的char值(单个数字)
c=strCode.charAt(i);
//使用此图形上下文的当前字体和颜色绘制由指定 string 给定的文本(x->文本的横坐标,y->文本的纵坐标)
graph.drawString(c+"",9*i+4,16);
}
//对servlet输出流进行JPEG格式编码
JPEGImageEncoder imageEncoder=JPEGCodec.createJPEGEncoder(servletOutputStream);
imageEncoder.encode(image);
//将获得的验证码字符串存入session
HttpSession session=request.getSession(true);
session.removeAttribute("VerifyCode");
session.setAttribute("VerifyCode",strCode);
//关闭输出流
servletOutputStream.close();
}
}
分享到:
相关推荐
【JSP验证码(Servlet)详解】 验证码是一种常用的安全机制,用于防止自动化的恶意程序,如机器人,进行非法操作。在Web开发中,JSP(JavaServer Pages)与Servlet结合使用可以实现动态生成并验证验证码的功能。这...
【JSP验证码技术详解】 验证码(CAPTCHA)是一种防止恶意自动化程序(如机器人)滥用服务的技术,它通过向用户展示一组难以由计算机自动识别的图像或文字,要求用户输入所见内容来验证其为真实的人。在JSP(Java...
jsp 验证码生成和刷新详解 jsp 验证码生成和刷新是 Web 开发中非常重要的一部分。验证码的生成和刷新可以防止机器人攻击和恶意注册。下面我们将详细介绍 jsp 验证码生成和刷新的过程。 一、四位数据的验证图片生成...
### JSP Servlet 验证码实现详解 #### 一、简介 验证码在现代Web应用中是一种常见的安全机制,用于区分用户是人还是自动化程序。在Java Web开发领域中,经常利用JSP(JavaServer Pages)与Servlet技术来实现验证码...
10. **安全注意事项**:尽管JSP验证码可以提供基础防护,但更高级的攻击手段(如OCR识别)可能仍能破解。因此,验证码只是多层安全措施中的一环,结合其他验证机制如IP限制、时间限制等,可以提高安全性。 以上就是...
**JSP验证码技术详解** 验证码(CAPTCHA)是一种防止恶意自动化程序(如机器人)滥用服务的验证机制。在Web开发中,JSP(JavaServer Pages)是常用的动态网页技术,结合Servlet可以实现强大的服务器端功能,包括...
这个JSP验证码生成器示例展示了如何使用JSP和Java图形处理库来创建动态的数字验证码。通过设置页面属性、控制页面缓存、生成随机颜色和线条、管理HTTP会话等技术手段,有效地提高了验证码的安全性和用户体验。这种...
### JSP页面验证码生成图片详解 #### 一、概述 在网站登录或注册过程中,为了防止恶意登录或机器人操作,通常会使用验证码机制。本文档详细介绍了一种利用JSP技术生成验证码图片的方法。该方法通过Java后端动态...
生成JSP验证码图片的过程主要包括以下几个步骤: 1. **生成随机字符串**:首先,我们需要在服务器端生成一个随机的字符串,这个字符串将作为验证码的内容。通常长度在4到6个字符之间,包含大小写字母和数字,确保既...
**JSP验证码与JavaScript验证详解** 验证码是一种常用的安全机制,用于防止自动化的恶意程序或机器人进行非法操作,如批量注册、刷票等。在Web开发中,Java Server Pages (JSP) 和 JavaScript 是两种常见的技术,...
**JSP验证码登录程序详解** 验证码(CAPTCHA)是一种用于防止自动机器人或恶意脚本进行非法操作的安全机制,常用于用户登录、注册等场景。在JSP(Java Server Pages)中,结合Servlet实现验证码功能,可以有效提升...
### 登录界面的验证码代码详解 #### 一、概述 在现代互联网应用中,为了防止自动化工具或恶意脚本对网站进行攻击或者垃圾注册等行为,通常会在用户登录时加入验证码这一环节。本文将深入分析一份典型的登录界面...
### JSP代码实现验证码功能详解 #### 一、概述 本文档详细介绍了如何使用Java Server Pages (JSP)技术来实现一个简单的验证码功能。验证码在Web应用中是一种常见的安全措施,用于防止自动化软件进行恶意操作,如...
### JSP生成验证码知识点详解 #### 一、概述 在Web应用中,为了防止机器自动填写表单,经常需要加入验证码这一环节。验证码的主要作用是确保操作是由人类而非自动化脚本执行的。本文将详细介绍如何使用Java Server...
【JSP验证码实现详解】 验证码(CAPTCHA)是一种防止机器自动操作的安全机制,它通过让用户输入图片或音频中显示的随机字符来验证用户是否为真实的人。在JSP(JavaServer Pages)中实现验证码,我们可以利用Java的...
- **生成验证码**:创建一个Servlet或JSP页面,生成随机字符串并保存到Session中,同时绘制验证码图像并响应给客户端。 ```java String code = generateRandomCode(); // 生成随机验证码 session.setAttribute(...
本示例中的代码展示了如何通过JSP和Servlet生成一个简单的四位数字验证码。以下是具体的知识点解析: 1. **Servlet基础**: Servlet是Java Web应用程序中的服务器端组件,用于处理HTTP请求并生成响应。`...
**JSP验证码技术详解** 验证码(CAPTCHA)是一种防止机器自动操作的安全机制,它通过让用户输入图片或音频中显示的扭曲文字或数字来验证用户是人类而非计算机程序。在Web开发中,JSP(JavaServer Pages)是常用的...