众所周知,注册码的作用是为了防止机器人登录和暴力软件的对于密码的暴力破解。那么注册码图片到底如何生成的,又如何运用的呢?本文旨在探讨在java web中注册码的生成和使用的过程。
7位纯数字注册码图片的生成代码段:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*设置浏览器不要缓存图片*/
response.setHeader("Expires", "-1");
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
/*生成注册码图片*/
BufferedImage image=new BufferedImage( 80, 20,BufferedImage.TYPE_INT_RGB);
Graphics2D g=(Graphics2D)image.getGraphics();
/*设置图片的背景色*/
g.setColor(Color.WHITE);
g.fillRect(0, 0, 80, 20);
/*设置验证码的颜色和字体*/
g.setColor(Color.RED);
g.setFont(new Font(null,Font.BOLD,20));
/*生成简易的验证码,为7位数字,并将值写入seesion中*/
String num=makenum();
request.getSession().setAttribute("checkcode", num);
g.drawString(num, 0, 20);
/*将图片发送给浏览器*/
response.setContentType("image/jpeg");
ImageIO.write(image, "jpg", response.getOutputStream());
}
/*7位数字验证码生成函数*/
public String makenum() {
// TODO Auto-generated method stub
Random random=new Random();
String num=Integer.toString(random.nextInt(9999999));
StringBuffer zeros = new StringBuffer();
for(int i=0;i<7-num.length();i++)
{
zeros.append("0");
}
return num+zeros;
}
简易的注册界面:
可以看到生成的验证码是:8996870
点击登录,转到如下代码段处理:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*设置浏览器的解码格式是utf-8*/
response.setContentType("text/html;charset=utf-8");
PrintWriter out= response.getWriter();
/*获取浏览器提交的验证码*/
String client_checkcode= request.getParameter("checkcode");
String server_checkcode=(String)request.getSession().getAttribute("checkcode");
/*判断验证码错误的情况
1.客户机没有携带验证码
2.服务器没有生成验证码,即没有登录请求
3.客户机的验证码和服务器的验证码不相等
*/
if(client_checkcode==null||server_checkcode==null||!server_checkcode.equals(client_checkcode))
{
out.write("验证码错误");
return;
}
out.write("登录成功");
}