`

生成验证码步骤:

    博客分类:
  • java
阅读更多
验证码步骤:

一: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;
}
}
分享到:
评论

相关推荐

    Java后端产生验证码后台验证功能的实现代码

    1. 生成验证码图片:使用BufferedImage类生成验证码图片,设置图片的宽度和高度,并创建一个随机数生成器类用于生成随机验证码。 2. 生成随机验证码:使用Random类生成随机验证码,验证码的长度可以根据需要进行...

    QT实现随机生成验证码

    验证码的生成主要包括以下几个步骤: 1. **定义验证码长度**:首先,我们需要决定验证码的长度,通常在4到6位之间,包含数字和大小写字母。这可以通过定义一个变量并设置其范围来实现。 2. **字符集选择**:定义一...

    页面js生成验证码

    验证码的生成通常包括以下几个步骤: 1. **随机数据生成**:首先,服务器或客户端的JavaScript会生成一段随机字符串,作为验证码的正确答案。这个字符串可以包含字母、数字,甚至符号,以增加识别难度。 2. **图像...

    java生成验证码的参考资料(中英文验证码)

    首先,验证码的生成通常涉及到以下几个关键步骤: 1. **随机字符生成**:验证码由一组随机字符组成,可以是数字、字母,也可以包括中文字符。在Java中,可以使用`java.util.Random`类生成随机数,配合字符数组来...

    生成验证码 jsp 图片验证码

    在JSP(JavaServer Pages)中,生成图片验证码涉及到以下几个关键步骤: 1. **随机生成验证码**:首先,我们需要创建一个函数,它能生成一个随机的字符串,长度通常为4-6位。这个字符串可以包含大小写字母和数字。...

    java web笔记之servlet生成验证码

    三、生成验证码的步骤 1. 创建Servlet类:首先,我们需要创建一个继承自`javax.servlet.http.HttpServlet`的类,比如`IdentityServlet`。 2. 实现服务方法:重写`doGet`或`doPost`方法,因为验证码通常在HTTP GET...

    ASP.NET多种生成验证码方法源码

    在ASP.NET中,生成验证码通常涉及以下步骤: 1. **生成随机字符串**:首先,需要一个函数来生成包含字母和数字的随机字符串。这可以通过使用.NET框架的`Random`类和字符数组来实现。 2. **创建Bitmap图像**:创建...

    Asp.Net 生成验证码

    本篇将详细介绍如何在Asp.Net环境中生成验证码,以及提供的源码文件的功能。 验证码的核心原理是生成一串随机的字符串或数字,然后将其显示为图片,用户需要在输入框中正确输入图片中的内容以验证其为真人操作。Asp...

    .net 生成 验证码 验证图片

    首先,验证码的生成过程包括以下几个步骤: 1. **随机生成验证码内容**:我们可以使用`Random`类来生成随机的数字和字母。为了确保安全性,通常验证码的长度设定为4到6位。可以通过定义字符集(包含大小写字母和...

    php动态随机生成验证码类

    在实际应用中,PHP动态验证码类通常包含以下步骤: 1. **初始化**:设置验证码的基本参数,如长度、字符集、背景色、字体等。 2. **创建图像**:使用GD库或Imagick库等PHP图形处理函数创建一个新的图像资源。 3. ...

    winform随机生成验证码案例

    以下是一个基本的步骤: 1. **生成随机字符序列**: 验证码通常包含字母和数字,有时也会包括特殊字符。我们可以定义一个包含这些字符的字符串,然后通过随机数生成器从中选取一定数量的字符。例如,可以使用`...

    生成验证码图片的jsp代码

    生成验证码图片的过程包括以下几个步骤: 1. **生成随机字符串**:这是验证码的核心,通常包含4到6个字符。可以使用Java的`Random`类结合字符集(如ASCII或Unicode)来生成随机字符串。 2. **创建BufferedImage...

    ajax验证码 验证码ajax 生成中文验证码

    要实现Ajax验证码,我们需要以下几个步骤: 1. **服务器端生成验证码**:服务器上需要有一个生成验证码的逻辑,这通常涉及到随机生成一组中文字符或数字,然后将其存储到服务器会话(session)或者Cookie中,以供...

    java随机生成验证码

    验证码(CAPTCHA)是一种用于验证用户是否为人类的自动化测试技术。...以上就是使用Java生成验证码的基本流程和关键知识点。通过调整各种参数和细节,可以根据实际需求定制出更复杂、更难被机器识别的验证码系统。

    验证码生成工具类

    在Java中,生成验证码的步骤包括: 1. **设计验证码内容**:首先,我们需要创建一个包含随机字符或数字的字符串。可以使用`java.util.Random`类生成随机数,并结合字符数组生成随机字符串。为了增加难度,通常会...

    Web动态生成验证码

    在Web开发中,动态生成验证码是提高网站安全性的重要手段。JSP(JavaServer Pages)和Servlet是Java Web开发中的核心组件,它们可以协同工作来实现这个功能。 JSP是一种服务器端技术,它允许开发者将HTML代码与Java...

    Java中实现生成验证码

    首先,验证码的生成通常涉及以下几个关键步骤: 1. **定义验证码字符源**: 在这个例子中,`VERIFY_CODES` 变量包含了用于生成验证码的所有可能字符,它只包含数字2到9以及大写字母A到Z,去除了容易混淆的1、0、i...

    C#生成并验证验证码

    在C#中,这些功能可以封装成一个类,如`CaptchaGenerator`,包含`GenerateCaptcha`方法生成验证码图像和字符串,以及`ValidateCaptcha`方法进行验证。为了提高安全性,生成的验证码通常设置为一次性有效,即一旦被...

    java生成验证码demo

    在"java生成验证码demo"中,你可能会找到一个完整的实现,包括以上所有步骤。通过查看源代码,你可以学习如何结合使用这些技术来创建自己的验证码生成器。这个Demo对于理解验证码工作原理和实现细节非常有帮助,同时...

    jsp 处理验证码的步骤

    首先,验证码的生成通常涉及以下几个核心步骤: 1. **生成随机码**:在服务器端,我们需要创建一个随机字符串,这个字符串将成为验证码的内容。可以使用Java的`Random`类或者`SecureRandom`类来生成这些随机字符,...

Global site tag (gtag.js) - Google Analytics