自己的验证图片生成servlet,还有相关的配置和JSP。先留个脚印
package com.thomas.logoimagecheck;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
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 ValidateCodeServlet extends HttpServlet {
// 验证码宽和高及验证码的位数
private int width = 80;
private int height = 30;
private int codecount = 4;
private int fontheight;
private int x;
private int codeY;
char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
public void inti() throws ServletException {
// 从web.xml文件中读取参数
String strWidth = this.getInitParameter("width");
String strHeight = this.getInitParameter("height");
String codeCount = this.getInitParameter("codeCount");
try {
if (strWidth != null && strWidth.length() != 0) {
width = Integer.getInteger(strWidth);
}
if (strHeight != null && strHeight.length() != 0) {
height = Integer.parseInt(strHeight);
}
if (codeCount != null && codeCount.length() != 0) {
codecount = Integer.parseInt(codeCount);
}
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 定义图像buffer
x = width / (codecount + 1);
fontheight = height - 4;
codeY = height - 4;
BufferedImage bimage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = bimage.createGraphics();
Random random = new Random();
g.setColor(Color.white);
g.fillRect(0, 0, width, height);
// 创建字体,字体的大小应该根据图片的高度来定。(fontheight实现了)
Font font = new Font("Times New Roman",Font.PLAIN,fontheight);
// 设置画的边框
g.setFont(font);
g.setColor(new Color(110,110,110));
g.drawRect(0, 0, width - 1, height - 1);
// 随机产生160条干扰线
//g.setColor(Color.BLACK);
for (int i = 0; i < 160; i++) {
int x = random.nextInt(160);
int y = random.nextInt(160);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x, y, x + xl, y + yl);
}
StringBuffer randomcode = new StringBuffer();
int red = 0, green = 0, blue = 0;
// 随机产生验证码
for (int i = 0; i < codecount; i++) {
// 产生验证码的数字
String strRand = String.valueOf(codeSequence[random.nextInt(36)]);
System.out.print(strRand);
red=20+random.nextInt(110);
green=20+random.nextInt(110);
blue=20+random.nextInt(110);
g.setColor(new Color(red,green,blue));
g.drawString(strRand,18*i+10,codeY);
randomcode.append(strRand);
}
//把字符串存储到session中
HttpSession session=req.getSession();
session.setAttribute("valibaleCode", randomcode.toString());
resp.setHeader("Pragma","no-cache");
resp.setHeader("Cache-Control","no-cache");
resp.setContentType("image/jpeg");
ServletOutputStream sos=resp.getOutputStream();
ImageIO.write(bimage, "jpeg", sos);
sos.close();
}
}
下面是验证的jsp
<body>
<% String str=(String)session.getAttribute("valibaleCode");
String imagestr=request.getParameter("rand");
//out.print(request.getParameter("rand"));
//out.print(str);
if(!imagestr.equalsIgnoreCase(str)){
out.print("unpassed");
}
if(imagestr.equalsIgnoreCase(str)){
out.print("passed ");
}
%>
<form method=post action="logoncheck/logon.jsp">
<img border=0 src="<%=basePath %>validate">
<input type=text name=rand value=""/>
<input type=submit value="check"/>
</form>
</body>
web.xml文件
<servlet-name>ValidateCodeServlet</servlet-name>
<servlet-class>com.thomas.logoimagecheck.ValidateCodeServlet</servlet-class>
<init-param>
<param-name>width</param-name>
<param-value>200</param-value>
</init-param>
<init-param>
<param-name>height</param-name>
<param-value>80</param-value>
</init-param>
<init-param>
<param-name>codeCount</param-name>
<param-value>5</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ValidateCodeServlet</servlet-name>
<url-pattern>/validate</url-pattern>
</servlet-mapping>
分享到:
相关推荐
导入eclipse就可以运行看到效果,导入eclipse就可以运行看到效果,导入eclipse就可以运行看到效果
自己做的J2EE小程序,登陆界面上的图片验证代码。
易语言简单的登陆密码验证源码,简单的登陆密码验证
2.图片还原,建议去用浏览器的审查元素点着验证图片审查一下,不然发现网站的验证码图片是width: 260px;height: 116px;然后被分割成40个小块,每个小块13*58;这些数据都能通过审查发现,可以给你很多启发,也可以...
在IT行业中,登陆验证是确保用户安全性的重要环节,而动态生成的图片验证码是防止恶意自动登录和机器人攻击的有效工具。本文将深入探讨“登陆验证”与“Servlet动态生成图片验证码”的相关知识点,并提供实践指导。 ...
资源名:asp.net短信登录验证码和图片验证程序源码 资源类型:程序源代码 源码说明: 1.实现了验证码倒计时的功能 1.以下验证码例子采用的是先获取手机号文字验证码,如果文字验证码收不到,将采用语音播放验证码的...
在login.jsp中,JavaScript可能用于前端验证,比如检查输入是否为空,或者在用户输入不匹配时给出即时反馈,但这并不涉及服务器端的安全验证。 6. **图片目录(images)**: 这个目录可能包含了生成的验证码图片。...
### servlet动态生成登录验证图片详解 #### 背景与需求 在现代Web开发中,为了提高用户体验并增强安全性,动态生成图片成为一种常见的技术手段。例如,在登录页面上使用动态验证码图片可以有效防止机器人自动登录...
在“易语言源码简单的登陆密码验证.7z”这个压缩包中,包含了一个用于实现基本登录密码验证功能的源代码。下面我们将详细探讨这个源码可能涉及的知识点。 1. **易语言基础**: - **语法结构**:易语言的语法设计...
在这个项目中,"c#简陋版 登陆验证" 涉及的是用C#实现一个简单的用户登录系统。登录验证通常包括以下步骤: 1. 用户界面:用户输入用户名和密码,这些信息通过文本框(TextBox)收集。 2. 验证逻辑:当用户点击登录...
2. 图片素材类型:QQ登录图片素材通常包含登录按钮、提示信息、加载动画、错误提示等多种类型。登录按钮是核心元素,一般会有“用QQ登录”或“QQ一键登录”的文字和QQ的LOGO;提示信息可能包括成功登录、授权失败等...
图片验证码在IT行业中是网络安全的重要组成部分,主要用于防止自动化的机器人或恶意软件进行非法登录、注册等操作。这种技术通过向用户展示一组随机生成的图像,其中包含扭曲或隐藏的字母和数字,要求用户输入看到的...
拖动图片验证码是一种常见的安全验证方式,用于防止自动机器人或恶意软件进行非法操作。这种验证方式要求用户通过拖动滑块来完成一个拼图,以此证明他们是人类而非计算机程序。在给定的“拖动图片验证码验证.zip”...
不求好评,只求认同,我只想和大家一起进步,觉得小弟的做的垃圾,我会吸取大哥们的指点错误进行改正。谢谢各位大哥们
在IT领域,特别是Web开发中,使用ExtJS框架进行用户登录界面的前端验证是一个常见的需求。根据提供的文件信息,我们可以详细解析如何利用ExtJS来实现这一功能。 ### ExtJS实现登录验证 #### 核心概念与流程 1. **...
2. **事件结构**:在程序框图(Block Diagram)中,使用事件结构来响应用户的操作,如点击登录按钮时执行验证逻辑。 3. **数据绑定**:将前面板上的控件与程序框图中的变量绑定,以便读取用户输入的数据。 二、...
一个基于asp.net C#后台的QQ第三方登陆后台,含发送微博,发送带图片微博示例。请在QQ申请到开发者账号以后将appkey在webconfig文件中配置,并且配置好加调地址。
简单易用
在.NET开发领域,Visual Studio 2008 (VS2008) 和 SQL Server 2000 是常见的开发工具和技术,对于初学者来说,理解如何构建注册和登录功能,以及实现安全的用户验证至关重要。这个教程可能涉及到C#编程语言,用于...