您的位置:首页 > 其它

注册页面的验证码的实现

2015-07-24 18:07 363 查看
验证码

主要:绘制,验证

  在一些网站的注册页面,通常在最后会让用户输入验证码,以此防止恶意注册,有些也会在登陆页面,防止暴力破解密码等.

  页面的验证码,实际上是一个图片,这个图片事先人们是不知道的,它是由程序随机绘制成的,并且,在产生的时候,程序记录下来了它的值.(便于后面的验证)

  

  servlet 服务器小程序,可以实现绘制验证码的功能,绘制的步骤如下:

  1.建立图片缓存对象

    BufferImage bi = new BufferImage(width,height,绘制类型参数);

    原型:BufferedImage(arg0, arg1, arg2)

  2.得到绘制对象

    Graphics g = bi.getGraphics();

  3.设置底纹颜色

    Color c = new Color(arg0,arg1,arg2);// 3个参数分别是三原色的值.

    g.setColor(c);

    g.fillRect(0, 0, 70, 30);       //填充矩形,0,0 表示的起始点.

  4.产生随机数字,得到随机字符,对图像进行绘制 (并且记录下来)

    字符区间:char[] ch = "asdfghjklzxcvbnmASDFGHJKLZXCVBNM123456789".toCharArray();

    字符缓存:StringBuffer sb = new StringBuffer();

    随机数 :Random r = new Random();


    //逐个绘制随机字符 并设置特定的颜色

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

    {

      int index = r.nextInt(ch.length()); //产生一个随机数

      //对字符分别设置绘制字体颜色

      g.setFont(new Font("宋体",Font.Bold,20));                //设置宋体,20号字体

      g.setColor(new Color(r.nexInt(255),r.nexInt(255),r.nexInt(255)));  //设置随机颜色,

      g.drawString(ch[index]+" ",i*20,25);                   //绘制字符,后面的参数为位置

      sb.append(ch[index]);  //添加字符到字符缓存区,(追加)


    }

    request.getSession().setAttribute("picCode",sb.toString());        //将验证码放到session中,方便后面的验证

   5.通过图片IO写到前台

     ImageIO.write(bi,"JPG",response.getOutputStream());  //通过输出流写到前台, JPG格式

到这里就能够在页面上面看到随机生成的验证码图片了.

[b]验证:[/b]

  验证就是在注册界面或者是登陆界面活取验证码 ,然后从session中活取验证码,然后二者比较相等,验证是否输入正确.

  从session中活取验证码

  String checkCode = request.getSession().getAttribute("picCode");

  从前台活取输入的验证码

  String code = request.getParameter("code");

  验证

  if(checkCode.equalsIgnoreCase(code)==false) response.sendRedirect("register.jsp");   //验证不成功跳转到制定页面

至此,验证码的相关基础的内容已经完毕,

代码:

myImage.java (servlet程序)

package cn.hpu.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.catalina.connector.Response;

import cn.hpu.model.user;
import cn.hpu.service.StuManager;
import cn.hpu.service.StuManagerimplement;

/**
* Servlet implementation class register
*/
@WebServlet("/register")
public class register extends HttpServlet {
private static final long serialVersionUID = 1L;

/**
* @see HttpServlet#HttpServlet()
*/
public register() {
super();
// TODO Auto-generated constructor stub
}

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
doPost(request, response);
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//        doGet(request, response);
//设置中文
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");

//获取数据
String name = request.getParameter("name");
String pwd = request.getParameter("password");
String code = request.getParameter("code");
String checkCode = (String) request.getSession().getAttribute("picCode");

user usr = new user();
usr.setName(name);
usr.setCode(code);
usr.setPassword(pwd);

if(checkCode.equalsIgnoreCase(code)==false){

//            PrintWriter out = response.getWriter();
//            out.println("验证码错误!\n3秒后自动跳转注册页面");

response.sendRedirect("register.jsp");
}

StuManager stuM = new StuManagerimplement();
boolean flag= false ;
try {
flag = stuM.add(usr);
if(flag) response.sendRedirect("index.jsp");

} catch (Exception e) {
// TODO: handle exception
}
}

}


View Code

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: