- 浏览: 176520 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (150)
- mysql (8)
- ssh (2)
- 总结 (14)
- 个人心扉 (5)
- 网摘 (14)
- 其它 (2)
- javascript (0)
- ajax (3)
- jquery (0)
- 正则表达式 (2)
- 我们的项目 (1)
- Java代理(静态和动态) (2)
- java (19)
- jsp (5)
- servlet (1)
- uml (0)
- java 细节常识 (1)
- 学习网址哈哈 (2)
- python (5)
- Wearing other`s shoes (6)
- jdbc (1)
- JMeter (18)
- 测试 (9)
- linux操作 (2)
- couchdb (0)
- ruby (20)
- QTP资源地址 (1)
- rspec 范例 (1)
- LR (3)
- spring (1)
- 自动化 (2)
- 无线测试相关 (1)
最新评论
-
1336224635:
...
EJB -
guanzhongdaoke54007:
很好很强大~[color=blue][/color][size ...
ResultSet -
enum:
thank's so mauch.
font color to ...
java生成登录验证码的方法 -
harbey:
文章很好,很受用!
转帖Jmeter中的几个重要测试指标释义 -
xiangguanglei:
非常感谢!这个问题苦恼了我很久。
关于ruby + watir
引用
验证码的作用:有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上是用验证码是现在很多网站通行的方式(比如招商银行的网上个人银行,腾讯的QQ社区),我们利用比较简易的方式实现了这个功能。虽然登陆麻烦一点,但是对网友的密码安全还来说这个功能还是很有必要,也很重要。但我们还是 提醒大家主要保护自己的密码 ,尽量使用混杂了数字、字母、符号在内的6位以上密码,不要使用诸如1234之类的简单密码或者与用户名相同、类似的密码,免得你的账号给人盗用给自己带来不必要的麻烦。
(1).验证码一般是防止批量注册的,人眼看起来都费劲,何况是机器。二像百度贴吧未登录发贴要输入验证码大概是防止大规模匿名回帖的发生目前,不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术。所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。
(2).一般注册用户ID的地方以及各大论坛都要要输入验证码
(3).常见的验证码
1,四位数字,随机的一数字字符串,最原始的验证码,验证作用几乎为零。2,CSDN网站用户登录用的是GIF格式,目前常用的随机数字图片验证码。图片上的字符比较中规中矩,验证作用比上一个好。没有基本图形图像学知识的人,不可破!可惜读取它的程序,在CSDN使用它的第一天,好像就在论坛里发布了,真是可怜!
2,汉字,QQ网站注册目前最新的验证码,都是汉字,随机生成,打起来更难了!
3,QQ网站用户登录用的是PNG格式,图片用的随机数字+随机大写英文字母,整个构图有点张扬,每刷新一次,每个字符还会变位置呢!有时候出来的图片,人眼都识别不了,厉害啊…4,MS的hotmail申请时候的是BMP格式, 随机数字+随机大写英文字母+随机干扰像素+随机位置。
4,韩文或日文,现在跑跑HF上MS注册都要打韩文的,这更增加了难度,要去修学下才行..
5,Google的Gmail注册时候的是JPG格式,随机英文字母+随机颜色+随机位置+随机长度。
6,其他各大论坛的是XBM格式,内容随机。
好了,知道了验证码的作用后,下面我们也来生成一个简单的登录验证码。
第一步,准备生成验证码图片的一个servlet.(CheckCoderTool.java)
Java代码
/*
* Created on 2005-10-15
* Author stephen
* Email zhoujianqiang AT gamil DOT com
* CopyRight(C)2005-2008 , All rights reserved.
*/
package com.soft4j.utility;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
*
* @author stephen
* @version 1.0.0
*/
public class CheckCoderTool extends HttpServlet {
/**
* 生成登录验证码.
* 验证码的数据从客户的session中的属性c中获取.<br>
* 生成的验证码以JPEG图片方式输出.
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("image/jpeg");
String c = (String) request.getSession().getAttribute("c");
if (c == null)c = "";
int width = c.length() * 8 + 10;
int height = 16;
int startX = 5;
int startY = 12;
BufferedImage bi = new BufferedImage(width, height,BufferedImage.TYPE_INT_BGR);
Graphics2D g = bi.createGraphics();
g.setColor(Color.GREEN);
g.setBackground(Color.black);
g.clearRect(0, 0, width, height);
g.drawString(c, startX, startY);
JPEGImageEncoder encoder = null;
JPEGEncodeParam param = null;
try {
encoder = JPEGCodec.createJPEGEncoder(response.getOutputStream());
param = encoder.getDefaultJPEGEncodeParam(bi);
param.setQuality(0.9f, false);
encoder.encode(bi);
} catch (Exception e) {
e.printStackTrace();
} finally {
bi = null;
g = null;
c = null;
encoder = null;
param = null;
}
}
}
/*
* Created on 2005-10-15
* Author stephen
* Email zhoujianqiang AT gamil DOT com
* CopyRight(C)2005-2008 , All rights reserved.
*/
package com.soft4j.utility;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
*
* @author stephen
* @version 1.0.0
*/
public class CheckCoderTool extends HttpServlet {
/**
* 生成登录验证码.
* 验证码的数据从客户的session中的属性c中获取.<br>
* 生成的验证码以JPEG图片方式输出.
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("image/jpeg");
String c = (String) request.getSession().getAttribute("c");
if (c == null)c = "";
int width = c.length() * 8 + 10;
int height = 16;
int startX = 5;
int startY = 12;
BufferedImage bi = new BufferedImage(width, height,BufferedImage.TYPE_INT_BGR);
Graphics2D g = bi.createGraphics();
g.setColor(Color.GREEN);
g.setBackground(Color.black);
g.clearRect(0, 0, width, height);
g.drawString(c, startX, startY);
JPEGImageEncoder encoder = null;
JPEGEncodeParam param = null;
try {
encoder = JPEGCodec.createJPEGEncoder(response.getOutputStream());
param = encoder.getDefaultJPEGEncodeParam(bi);
param.setQuality(0.9f, false);
encoder.encode(bi);
} catch (Exception e) {
e.printStackTrace();
} finally {
bi = null;
g = null;
c = null;
encoder = null;
param = null;
}
}
}
第二步,在web.xml中配置上面的servlet.
Html代码
...
<servlet>
<servlet-name>CheckCoderTool</servlet-name>
<servlet-class>com.soft4j.utility.CheckCoderTool</servlet-class>
</servlet>
...
<servlet-mapping>
<servlet-name>CheckCoderTool</servlet-name>
<url-pattern>/CheckCoder</url-pattern>
</servlet-mapping>
...
...
<servlet>
<servlet-name>CheckCoderTool</servlet-name>
<servlet-class>com.soft4j.utility.CheckCoderTool</servlet-class>
</servlet>
...
<servlet-mapping>
<servlet-name>CheckCoderTool</servlet-name>
<url-pattern>/CheckCoder</url-pattern>
</servlet-mapping>
...
第三步,准备登录的jsp页面 (code.jsp)
其中有一段 /CheckCoder?t=<%=t%>,在调用生成图片验证码的servlet后面加了个时间戳参数,可以防止验证图片从缓存中取出,确保每次显示的都是当前最新生成的验证图片。
Html代码
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ page import="java.util.Date"%>
<%@ page import="com.soft4j.utility.StringTool"%>
<%
response.setHeader("Cache-Control","no-cache");
response.setHeader("Expires","Thu,01 Jan 1970 00:00:01 GMT");
String checkCode = StringTool.randomChars(4);//生成验证码 StringTool.randomChars(4)方法在下面的例子中能找到.
session.setAttribute("c",checkCode);//验证码存入session中
long t = (new Date()).getTime();//确保每次刷新都生成新的验证码图片
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>登录管理</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body bgcolor="#ffffff" topmargin="150px" leftmargin="20px" rightmargin="20px">
<form method="post" action="login.jsp">
<center><h2>登录管理</h2></center>
<br>
<table cellspacing="0" cellpadding="0" border="0" width="100%"><tr><td class="line"><img height="1" alt="" width="1"></td></tr>
<tr><td align="center" bgcolor="#efffff">
<br><br>
账号:<input type="text" name="login_id" value="">
密码:<input type="password" name="login_pwd" value="">
验证码:<input type="text" name="check_code" value="" size=5> <IMG src=<%=request.getContextPath()%>/CheckCoder?t=<%=t%> alt=请把看到的4位数字输入左边的验证码框内>
<input type="submit" name="submit" class="buttonblue" value=" 进入 ">
<br><br><br>
</td></tr>
<tr><td class="line"><img height="1" alt="" width="1"></td></tr>
</table>
</form>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ page import="java.util.Date"%>
<%@ page import="com.soft4j.utility.StringTool"%>
<%
response.setHeader("Cache-Control","no-cache");
response.setHeader("Expires","Thu,01 Jan 1970 00:00:01 GMT");
String checkCode = StringTool.randomChars(4);//生成验证码 StringTool.randomChars(4)方法在下面的例子中能找到.
session.setAttribute("c",checkCode);//验证码存入session中
long t = (new Date()).getTime();//确保每次刷新都生成新的验证码图片
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>登录管理</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body bgcolor="#ffffff" topmargin="150px" leftmargin="20px" rightmargin="20px">
<form method="post" action="login.jsp">
<center><h2>登录管理</h2></center>
<br>
<table cellspacing="0" cellpadding="0" border="0" width="100%"><tr><td class="line"><img height="1" alt="" width="1"></td></tr>
<tr><td align="center" bgcolor="#efffff">
<br><br>
账号:<input type="text" name="login_id" value="">
密码:<input type="password" name="login_pwd" value="">
验证码:<input type="text" name="check_code" value="" size=5> <IMG src=<%=request.getContextPath()%>/CheckCoder?t=<%=t%> alt=请把看到的4位数字输入左边的验证码框内>
<input type="submit" name="submit" class="buttonblue" value=" 进入 ">
<br><br><br>
</td></tr>
<tr><td class="line"><img height="1" alt="" width="1"></td></tr>
</table>
</form>
</body>
</html>
下面是随机生成4位数字java方法:
Java代码
/**
* 生成随机字符串. <br>
* 随机字符串的内容包含[0-9]的字符. <br>
*
* @param randomLength
* 随机字符串的长度
* @return 随机字符串.
*/
public static String randomChars(int randomLength) {
char[] randoms = { '0','1', '2', '3',
'4', '5', '6', '7', '8', '9' };
Random random = new Random();
StringBuffer ret = new StringBuffer();
for (int i = 0; i < randomLength; i++) {
ret.append(randoms[random.nextInt(randoms.length)]);
}
random = null;
return ret.toString();
}
/**
* 生成随机字符串. <br>
* 随机字符串的内容包含[0-9]的字符. <br>
*
* @param randomLength
* 随机字符串的长度
* @return 随机字符串.
*/
public static String randomChars(int randomLength) {
char[] randoms = { '0','1', '2', '3',
'4', '5', '6', '7', '8', '9' };
Random random = new Random();
StringBuffer ret = new StringBuffer();
for (int i = 0; i < randomLength; i++) {
ret.append(randoms[random.nextInt(randoms.length)]);
}
random = null;
return ret.toString();
}
第四步,就是检验填写的验证码是否正确。
Html代码
<%@ page contentType="text/html;charset=UTF-8"%>
<%
try{
String checkCode = request.getParameter("check_code");
if(checkCode==null || "".equals(checkCode)) throw new Exception("缺少验证码。");
String rightCheckCode = (String)session.getAttribute("c");
if(!checkCode.equals(rightCheckCode)) throw new Exception("验证码不正确。");
//继续验证用户名/密码
//...
}catch(Exception e){
}finally{
//
}
%>
<%@ page contentType="text/html;charset=UTF-8"%>
<%
try{
String checkCode = request.getParameter("check_code");
if(checkCode==null || "".equals(checkCode)) throw new Exception("缺少验证码。");
String rightCheckCode = (String)session.getAttribute("c");
if(!checkCode.equals(rightCheckCode)) throw new Exception("验证码不正确。");
//继续验证用户名/密码
//...
}catch(Exception e){
}finally{
//
}
%>
发表评论
-
File源码理解
2015-01-07 15:30 01.构造函数 最基本的构造方法。 Java代码 ... -
java 定时器
2014-07-30 17:41 0java的Timer以及TimerTask类可以帮助我们实现 ... -
折半查找
2009-03-15 20:57 1024http://www.hiahia.org/datastruc ... -
Tomcat服务器
2009-03-15 10:04 751一、Tomcat背景 自从JSP发布之后,推出了各式各样 ... -
冒泡排序
2009-03-15 09:31 820目的:按要求从大到小或从小到大排序。 基本思路:对尚未排 ... -
字符串反转
2009-03-05 21:03 1334public class Fanzhuan { publ ... -
DOM模型概述
2009-02-27 22:02 1009自从W3C建立了DOM标准 (W3 ... -
常用集合类的区别
2009-02-22 23:49 853线性表,链表,哈希表 ... -
什么是数据库死锁
2009-02-22 20:12 2308什么是数据库死锁 每个使用关系型数据库的程序都可能 ... -
详细分析不同类型数据库的死锁问题
2009-02-22 19:52 950关键字: 详细 类型 数据 ... -
Object.toString()方法
2009-02-22 01:33 1747[size=medium]在java项目的 ... -
Java 中Iterator 、Vector、Array
2009-02-22 01:27 1420线性表,链表,哈希表 ... -
java.io包中的流文件、文件类
2009-02-22 01:25 993[color=white] 视频认证 ... -
java.io的日常用法
2009-02-22 01:23 1467[size=small] <%@ page conte ... -
如何从文件中读取数据
2009-02-22 01:21 992public void readDate(String fi ... -
java.io包
2009-02-22 01:18 802java.io包难吗?2008-04-03 16:58j ... -
彻底明白Java的IO系统
2009-02-22 01:16 668一. Input和Output 1. strea ... -
ResultSet
2009-02-22 01:06 1406结果集(ResultSet)是数据中查询结果返回的一种对象,可 ... -
过滤器
2009-02-22 00:58 842其实很多的JavaWEB开发 ... -
EJB
2009-02-22 00:48 1238EJB是sun的服务器端 ...
相关推荐
java生成图片验证码
一个登录验证生成验证码用struts 后台生成验证码在jsp页面输出生成图片
java 生成图片验证码 带干扰线等
java 生成彩色验证码的程序,改程序可以极大的帮助你,是你可以自动生成彩色的验证码
java生成随机验证码, 这是一个demo, eclipse项目,导入eclipse即可
java生成验证码源码包括彩色验证码 包括jsp生成验证码和彩色验证码
Java随机生成验证码图片,适用于web登录验证等。个人觉得很不错~
java随机生成验证码
Java生成图片验证码 Java代码
java生成的随机验证码
java生成验证码的工具类,这个现在有依赖可以直接引入调用,但这个工具类没有引入依赖,大家也容易看懂代码,理解其含义。也可直接去工具类中调整生成验证码的宽度、高度、颜色、背景颜色、生成的随机数数量、干扰线...
java后台生成背景色透明验证码的方法,可直接调用。本方法只生成随机字符数字组成的四位验证码。
Java生成图形验证码
随机验证码。 - 随机生成十组六位字符组成的验证码。 - 验证码由大小写字母、数字字符组成。
java生成随机验证码,可以自己根据需求设置验证码长度和验证码干扰信息数量
验证码是JAVA代码自动的生成绘制,适合不用JS写验证码,实现的功能更好
本代码用了JAVA JSP,是一个简间的自动生成验证码,很适合初学者学
生成验证码图片 java类中获得验证码的方法: session.getAttribute("checkcode"); jsp页面中显示图片的方式: ${pageContext.request.contextPath}/checkcode.jsp"/> 另外在web.xml中配置验证码类的加载: ...
java代码生成验证码(servlet).送给需要的人吧。