- 浏览: 95025 次
- 性别:
- 来自: 深圳
文章分类
最新评论
验证码步骤:
一:web.xml文件里加
<servlet>
<servlet-name>validImg</servlet-name>
<servlet-class>
test.validImg
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>validImg</servlet-name>
<url-pattern>/validImg</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
注释test.validImg 是一个类路径
二:
package test;
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 javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class validImg extends HttpServlet {
private Font mFont = new Font("Arial Black", Font.PLAIN, 20);
public void init() throws ServletException
{
super.init();
}
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 service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");
int width=75, height=16;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
Random random = new Random();
g.setColor(getRandColor(200,250));
g.fillRect(1, 1, width-1, height-1);
g.setColor(new Color(102,102,102));
g.drawRect(0, 0, width-1, height-1);
g.setFont(mFont);
g.setColor(getRandColor(160,200));
for (int i=0;i<55;i++)
{
int x = random.nextInt(width - 1);
int y = random.nextInt(height - 1);
int xl = random.nextInt(6) + 1;
int yl = random.nextInt(12) + 1;
g.drawLine(x,y,x + xl,y + yl);
}
for (int i = 0;i < 7;i++)
{
int x = random.nextInt(width - 1);
int y = random.nextInt(height - 1);
int xl = random.nextInt(12) + 1;
int yl = random.nextInt(6) + 1;
g.drawLine(x,y,x - xl,y - yl);
}
String sRand="";
for (int i=0;i<4;i++)
{
String tmp = getRandomChar();
sRand += tmp;
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
g.drawString(tmp,15*i+10,15);
}
HttpSession session = request.getSession(true);
session.setAttribute("rand",sRand);
g.dispose();
ImageIO.write(image, "JPEG", response.getOutputStream());
}
private String getRandomChar()
{
int rand = (int)Math.round(Math.random() * 2);
long itmp = 0;
char ctmp = '\u0000';
switch (rand)
{
case 0:
itmp = Math.round(Math.random() * 25 + 97);
if(itmp == 111 || itmp ==79 || itmp ==105 || itmp==73)
itmp = itmp+1;
ctmp = (char)itmp;
return String.valueOf(ctmp).toUpperCase();
case 1:
itmp = Math.round(Math.random() * 25 + 65);
if(itmp == 111 || itmp ==79 || itmp ==105 || itmp==73)
itmp = itmp+1;
ctmp = (char)itmp;
return String.valueOf(ctmp).toUpperCase();
case 2:
itmp = Math.round(Math.random() * 25 + 97);
if(itmp == 111 || itmp ==19 || itmp ==105 || itmp==73)
itmp = itmp+1;
ctmp = (char)itmp;
return String.valueOf(ctmp).toUpperCase();
default :
itmp = Math.round(Math.random() * 9);
if(itmp == 111 || itmp ==79 || itmp ==105 || itmp==73)
itmp = itmp+1;
return String.valueOf(itmp);
}
}
}
三: 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="${pageContext.request.contextPath}/js/jquery-1.3.2.js"></script>
<SCRIPT type="text/javascript">
function refresh1(){
$("#validImg").attr("src", "${pageContext.request.contextPath}/validImg?now="+new Date());
}
</SCRIPT>
</head>
<body>
<img src="${pageContext.request.contextPath}/validImg" id="validImg" width="60" height="20" onclick="refresh1()"/>
</body>
</html>
四 action 中
String rand = (String) getSession().get("rand");
varcode是页面输入的文本框
if(vercode == null|| ("").equals(vercode)){
message="验证码不能为空";
this.getRequest().setAttribute("username", username);
this.getRequest().setAttribute("password", password);
return Action.ERROR;
}
if(rand==null)
{
message="验证码输入超时,请重新输入";
return Action.ERROR;
}
if(!this.vercode.toLowerCase().equals(rand.toLowerCase())){
this.getRequest().setAttribute("username", username);
this.getRequest().setAttribute("password", password);
message="验证码输入错误";
return Action.ERROR;
}
password = PwdMD5.MD5(password);
if (ServiceManager.agent.getAdminUserService()
.findUserByNameAndPass(username, password)) {
/**
* 用户验证成功后,把数据放入session
*/
adminUserDto=ServiceManager.agent.getAdminUserService().findUserByEmail(username);
Date now=new Date();
adminUserDto.setLoginTime(now);
boolean flag=false;
flag=ServiceManager.agent.getAdminUserService().update(adminUserDto);
if(flag==true){
this.getSession().put("adminUser", adminUserDto);
// 用户名保存到cookie,暂略...
Cookie cookieAccount = new Cookie("adminUserAccount",
adminUserDto.getEmail());
// 保留一天
cookieAccount.setMaxAge(3600 * 24);
this.getResponse().addCookie(cookieAccount);
this.getRequest().setAttribute("today", new Date());
return Action.SUCCESS;
}
this.getRequest().setAttribute("username", username);
this.getRequest().setAttribute("password", password);
message="登陆不成功";
return Action.ERROR;
} else {
this.getRequest().setAttribute("username", username);
this.getRequest().setAttribute("password", password);
message = "密码不正确";
return Action.ERROR;
}
}
一:web.xml文件里加
<servlet>
<servlet-name>validImg</servlet-name>
<servlet-class>
test.validImg
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>validImg</servlet-name>
<url-pattern>/validImg</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
注释test.validImg 是一个类路径
二:
package test;
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 javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class validImg extends HttpServlet {
private Font mFont = new Font("Arial Black", Font.PLAIN, 20);
public void init() throws ServletException
{
super.init();
}
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 service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");
int width=75, height=16;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
Random random = new Random();
g.setColor(getRandColor(200,250));
g.fillRect(1, 1, width-1, height-1);
g.setColor(new Color(102,102,102));
g.drawRect(0, 0, width-1, height-1);
g.setFont(mFont);
g.setColor(getRandColor(160,200));
for (int i=0;i<55;i++)
{
int x = random.nextInt(width - 1);
int y = random.nextInt(height - 1);
int xl = random.nextInt(6) + 1;
int yl = random.nextInt(12) + 1;
g.drawLine(x,y,x + xl,y + yl);
}
for (int i = 0;i < 7;i++)
{
int x = random.nextInt(width - 1);
int y = random.nextInt(height - 1);
int xl = random.nextInt(12) + 1;
int yl = random.nextInt(6) + 1;
g.drawLine(x,y,x - xl,y - yl);
}
String sRand="";
for (int i=0;i<4;i++)
{
String tmp = getRandomChar();
sRand += tmp;
g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));
g.drawString(tmp,15*i+10,15);
}
HttpSession session = request.getSession(true);
session.setAttribute("rand",sRand);
g.dispose();
ImageIO.write(image, "JPEG", response.getOutputStream());
}
private String getRandomChar()
{
int rand = (int)Math.round(Math.random() * 2);
long itmp = 0;
char ctmp = '\u0000';
switch (rand)
{
case 0:
itmp = Math.round(Math.random() * 25 + 97);
if(itmp == 111 || itmp ==79 || itmp ==105 || itmp==73)
itmp = itmp+1;
ctmp = (char)itmp;
return String.valueOf(ctmp).toUpperCase();
case 1:
itmp = Math.round(Math.random() * 25 + 65);
if(itmp == 111 || itmp ==79 || itmp ==105 || itmp==73)
itmp = itmp+1;
ctmp = (char)itmp;
return String.valueOf(ctmp).toUpperCase();
case 2:
itmp = Math.round(Math.random() * 25 + 97);
if(itmp == 111 || itmp ==19 || itmp ==105 || itmp==73)
itmp = itmp+1;
ctmp = (char)itmp;
return String.valueOf(ctmp).toUpperCase();
default :
itmp = Math.round(Math.random() * 9);
if(itmp == 111 || itmp ==79 || itmp ==105 || itmp==73)
itmp = itmp+1;
return String.valueOf(itmp);
}
}
}
三: 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="${pageContext.request.contextPath}/js/jquery-1.3.2.js"></script>
<SCRIPT type="text/javascript">
function refresh1(){
$("#validImg").attr("src", "${pageContext.request.contextPath}/validImg?now="+new Date());
}
</SCRIPT>
</head>
<body>
<img src="${pageContext.request.contextPath}/validImg" id="validImg" width="60" height="20" onclick="refresh1()"/>
</body>
</html>
四 action 中
String rand = (String) getSession().get("rand");
varcode是页面输入的文本框
if(vercode == null|| ("").equals(vercode)){
message="验证码不能为空";
this.getRequest().setAttribute("username", username);
this.getRequest().setAttribute("password", password);
return Action.ERROR;
}
if(rand==null)
{
message="验证码输入超时,请重新输入";
return Action.ERROR;
}
if(!this.vercode.toLowerCase().equals(rand.toLowerCase())){
this.getRequest().setAttribute("username", username);
this.getRequest().setAttribute("password", password);
message="验证码输入错误";
return Action.ERROR;
}
password = PwdMD5.MD5(password);
if (ServiceManager.agent.getAdminUserService()
.findUserByNameAndPass(username, password)) {
/**
* 用户验证成功后,把数据放入session
*/
adminUserDto=ServiceManager.agent.getAdminUserService().findUserByEmail(username);
Date now=new Date();
adminUserDto.setLoginTime(now);
boolean flag=false;
flag=ServiceManager.agent.getAdminUserService().update(adminUserDto);
if(flag==true){
this.getSession().put("adminUser", adminUserDto);
// 用户名保存到cookie,暂略...
Cookie cookieAccount = new Cookie("adminUserAccount",
adminUserDto.getEmail());
// 保留一天
cookieAccount.setMaxAge(3600 * 24);
this.getResponse().addCookie(cookieAccount);
this.getRequest().setAttribute("today", new Date());
return Action.SUCCESS;
}
this.getRequest().setAttribute("username", username);
this.getRequest().setAttribute("password", password);
message="登陆不成功";
return Action.ERROR;
} else {
this.getRequest().setAttribute("username", username);
this.getRequest().setAttribute("password", password);
message = "密码不正确";
return Action.ERROR;
}
}
发表评论
-
首页静态化步骤
2015-04-23 23:30 0首页静态化步骤: 1,定时器跑方法 fileName静态页面 ... -
浅析配置更快的Eclipse方法
2014-06-11 09:22 777很多人感觉自己的elipse启动比较慢,其实并不是因为装的插件 ... -
tomcat 启动获取service
2013-12-30 22:55 0ServletContext sc = getServletC ... -
ServletContextListener
2012-11-13 10:19 1026web.xml: <listener> ... -
IntelliJ Idea 常用快捷键列表 .
2012-05-18 13:32 1066Alt+回车 导入包,自动修正Ctrl+N 查找类Ctrl ... -
重要文件
2012-03-23 17:10 0存储引擎和索引 Maven Prototype Ma ... -
jsoup 抓数据
2012-03-06 09:44 0public static void main(String ... -
JAVA面试题集
2012-02-09 10:11 0JAVA面试题集 基础知识 ... -
eclipse反编译插件Jadclipse
2012-02-04 10:05 1054一、下载Jad http://www.kpd ... -
sql分页
2011-11-11 14:10 0public List findActBuy ... -
java利用exe4j生成exe可执行文件
2011-11-07 15:31 1194前言: 我们都知道Java可以将二进制程序打包成可执 ... -
深度克隆
2011-10-28 13:31 830/** * @see 深度克隆 * @param s ... -
数字在数组中出现的次数
2011-10-14 10:11 944import java.util.*; public c ... -
Ant入门教程
2011-08-30 13:40 719一、构建ant环境 要使用ant首先要构建一个ant环境,步 ... -
DateUtils
2011-07-25 16:14 3283public class DateUtils { p ... -
myeclipse 使用技巧
2011-07-07 19:32 870myeclipse 使用技巧 -Xms256m -Xmx10 ... -
HashSet详解:不能重复(对象的哈希代码一样),无序
2011-07-06 13:45 1821HashSet中不允许有重复的元素。例如: Set hash ... -
http://www.oschina.net/开源中国社区
2011-06-17 13:10 1653学习 网站 http://caihx.iteye.co ... -
静态方法
2011-05-25 15:50 746desturl:http://local.e1ht.com:8 ... -
web标准网站命名
2010-12-18 11:33 1338网页制作规范: 一:命名规范 01:文件命名的原则:以最 ...
相关推荐
1. 生成验证码图片:使用BufferedImage类生成验证码图片,设置图片的宽度和高度,并创建一个随机数生成器类用于生成随机验证码。 2. 生成随机验证码:使用Random类生成随机验证码,验证码的长度可以根据需要进行...
验证码的生成主要包括以下几个步骤: 1. **定义验证码长度**:首先,我们需要决定验证码的长度,通常在4到6位之间,包含数字和大小写字母。这可以通过定义一个变量并设置其范围来实现。 2. **字符集选择**:定义一...
验证码的生成通常包括以下几个步骤: 1. **随机数据生成**:首先,服务器或客户端的JavaScript会生成一段随机字符串,作为验证码的正确答案。这个字符串可以包含字母、数字,甚至符号,以增加识别难度。 2. **图像...
首先,验证码的生成通常涉及到以下几个关键步骤: 1. **随机字符生成**:验证码由一组随机字符组成,可以是数字、字母,也可以包括中文字符。在Java中,可以使用`java.util.Random`类生成随机数,配合字符数组来...
在JSP(JavaServer Pages)中,生成图片验证码涉及到以下几个关键步骤: 1. **随机生成验证码**:首先,我们需要创建一个函数,它能生成一个随机的字符串,长度通常为4-6位。这个字符串可以包含大小写字母和数字。...
三、生成验证码的步骤 1. 创建Servlet类:首先,我们需要创建一个继承自`javax.servlet.http.HttpServlet`的类,比如`IdentityServlet`。 2. 实现服务方法:重写`doGet`或`doPost`方法,因为验证码通常在HTTP GET...
在ASP.NET中,生成验证码通常涉及以下步骤: 1. **生成随机字符串**:首先,需要一个函数来生成包含字母和数字的随机字符串。这可以通过使用.NET框架的`Random`类和字符数组来实现。 2. **创建Bitmap图像**:创建...
本篇将详细介绍如何在Asp.Net环境中生成验证码,以及提供的源码文件的功能。 验证码的核心原理是生成一串随机的字符串或数字,然后将其显示为图片,用户需要在输入框中正确输入图片中的内容以验证其为真人操作。Asp...
首先,验证码的生成过程包括以下几个步骤: 1. **随机生成验证码内容**:我们可以使用`Random`类来生成随机的数字和字母。为了确保安全性,通常验证码的长度设定为4到6位。可以通过定义字符集(包含大小写字母和...
在实际应用中,PHP动态验证码类通常包含以下步骤: 1. **初始化**:设置验证码的基本参数,如长度、字符集、背景色、字体等。 2. **创建图像**:使用GD库或Imagick库等PHP图形处理函数创建一个新的图像资源。 3. ...
以下是一个基本的步骤: 1. **生成随机字符序列**: 验证码通常包含字母和数字,有时也会包括特殊字符。我们可以定义一个包含这些字符的字符串,然后通过随机数生成器从中选取一定数量的字符。例如,可以使用`...
生成验证码图片的过程包括以下几个步骤: 1. **生成随机字符串**:这是验证码的核心,通常包含4到6个字符。可以使用Java的`Random`类结合字符集(如ASCII或Unicode)来生成随机字符串。 2. **创建BufferedImage...
要实现Ajax验证码,我们需要以下几个步骤: 1. **服务器端生成验证码**:服务器上需要有一个生成验证码的逻辑,这通常涉及到随机生成一组中文字符或数字,然后将其存储到服务器会话(session)或者Cookie中,以供...
验证码(CAPTCHA)是一种用于验证用户是否为人类的自动化测试技术。...以上就是使用Java生成验证码的基本流程和关键知识点。通过调整各种参数和细节,可以根据实际需求定制出更复杂、更难被机器识别的验证码系统。
在Java中,生成验证码的步骤包括: 1. **设计验证码内容**:首先,我们需要创建一个包含随机字符或数字的字符串。可以使用`java.util.Random`类生成随机数,并结合字符数组生成随机字符串。为了增加难度,通常会...
在Web开发中,动态生成验证码是提高网站安全性的重要手段。JSP(JavaServer Pages)和Servlet是Java Web开发中的核心组件,它们可以协同工作来实现这个功能。 JSP是一种服务器端技术,它允许开发者将HTML代码与Java...
首先,验证码的生成通常涉及以下几个关键步骤: 1. **定义验证码字符源**: 在这个例子中,`VERIFY_CODES` 变量包含了用于生成验证码的所有可能字符,它只包含数字2到9以及大写字母A到Z,去除了容易混淆的1、0、i...
在C#中,这些功能可以封装成一个类,如`CaptchaGenerator`,包含`GenerateCaptcha`方法生成验证码图像和字符串,以及`ValidateCaptcha`方法进行验证。为了提高安全性,生成的验证码通常设置为一次性有效,即一旦被...
在"java生成验证码demo"中,你可能会找到一个完整的实现,包括以上所有步骤。通过查看源代码,你可以学习如何结合使用这些技术来创建自己的验证码生成器。这个Demo对于理解验证码工作原理和实现细节非常有帮助,同时...
首先,验证码的生成通常涉及以下几个核心步骤: 1. **生成随机码**:在服务器端,我们需要创建一个随机字符串,这个字符串将成为验证码的内容。可以使用Java的`Random`类或者`SecureRandom`类来生成这些随机字符,...