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

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

 胡立新

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;

    }

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值