现在的位置: 首页 > 综合 > 正文

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

2013年08月01日 ⁄ 综合 ⁄ 共 2471字 ⁄ 字号 评论关闭
如何在用户注册或登录时使用验证码图片
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是用户上传的验证信息。如果上传的验证信息不等于保存在会话中的验证信息则返回。

 

抱歉!评论已关闭.