随笔-39  评论-33  文章-0  trackbacks-0

如何在用户注册或登录时使用验证码图片

  胡立新

1、 策略

1.1   在用户登录或注册的 jsp 页面上创用验证码图片,显示在界面上,同时将验证码构成的字符串保存到会话中。

1.2   在后台检查用户上传的验证信息是否与保存在会话中的验证码字符串相同,如果不同要求用户重输。

2、 产生验证码图片的 java 代码:

package bbs.business;

 

import javax.servlet.ServletRequest;

import java.util.Random;

import java.awt.Font;

import javax.servlet.http.HttpServletRequest;

import java.awt.Color;

import java.awt.image.BufferedImage;

import java.awt.Graphics;

 

public class ValidateImage {

    public static String createImage(ServletRequest request,String imageName){

        HttpServletRequest servletRequest=(HttpServletRequest)request;

        Random random=new Random();

        String valiCode="";

        for (int i = 0; i < 4; i++) {

            String rand = String.valueOf(random.nextInt(10));

            valiCode+=rand;

        }

        if(servletRequest.getSession()==null)

            servletRequest.getSession().setAttribute("valiCode",valiCode);

        else

            servletRequest.getSession(false).setAttribute("valiCode",valiCode);

 

        int width = 60, height = 20;

        BufferedImage image = new BufferedImage(width, height,

                                                BufferedImage.TYPE_INT_RGB);

        Graphics g = image.getGraphics();

        g.setColor(new Color(0xDCDCDC));

        g.fillRect(0, 0, width, height);

        g.setColor(Color.black);

        g.drawRect(0,0,width-1,height-1);

        g.setFont(new Font("Atlantic Inline",Font.PLAIN,18));

        g.setColor(Color.black);

        g.drawString(valiCode.substring(0,1), 8, 17);

        g.drawString(valiCode.substring(1,2), 20, 15);

        g.drawString(valiCode.substring(2,3), 35, 18);

        g.drawString(valiCode.substring(3,4), 45, 15);

        g.dispose();

        servletRequest.getSession(false).setAttribute(imageName,image);

        return valiCode;

    }

}

方法 createImage(ServletRequest request,String imageName) 产生图片并以 imageName 为键名保存到会话中,返回图片上显示的字符串,这个字符也以“ valiCode ”为键名保存在会话中。

3、 运用方法

3.1 jsp 页面上产生验证码图片并显示,将字符保存在会话中。

    <td> 验证码 </td>

    <td>

<html:text property="valiCode" size="8"></html:text>

</td>

    <% bbs.business.ValidateImage.createImage(request,"valiImage");%>

    <td>

        <nhtml:image name="valiImage" path="/showImage" refresh="true"/> *

    </td>

    效果如下:

   

<nhtml:image name="valiImage" path="/showImage" refresh="true"/> 使用了 newxy新坐标 的标签 <nhtml:image/> 作用是显示内存中的图片。

3.2 在后台进行比较。

    String valiCode=(String) user.get("valiCode");

    if (valiCode == null || !(valiCode.equals(servletRequest.getSession(false).getAttribute("valiCode")))) {

            servletRequest.setAttribute("message", " 提示:验证码不正确! ");

            return forward;

    }

    user formBean valiCode 是用户上传的验证信息。如果上传的验证信息不等于保存在会话中的验证信息则返回。

posted on 2007-03-20 00:14 newxy新坐标 阅读(2730) 评论(1)  编辑  收藏

评论:
# re: 如何在用户注册或登录时使用验证码图片[未登录] 2007-05-15 15:23 | yt
tt  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: