javaweb之验证码

javaweb之验证码

j

一、验证码的作用

验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意**密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力**方式进行不断的登陆尝试,实际上用验证码是现在很多网站通行的方式。

二、如何实现验证码的自动生成

java的io流就很好的解决了这个问题。

java的io流分为字符流和字节流。字符流主要处理文本类的信息,而字节流则可以处理图片、音频等各类信息。验证码属于图片,所以我们将使用字节流的方式生成验证码。

首先,我们创建一个生成验证码的类。

package demo1;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;

import javax.imageio.ImageIO;

public class ImageGenerater {
   
	public static void write(OutputStream out) throws FileNotFoundException,IOException{
   
		
		BufferedImage image = new BufferedImage(60,32,BufferedImage.TYPE_4BYTE_ABGR_PRE);
		
		Graphics g = image.getGraphics();
		
		g.setColor(Color.pink);
		g.setFont(new Font("宋体",Font.ITALIC,20));
		
		
		String text = " ";
		for(int i=0;i<4;i++) {
   
			text += (int) (Math.random()*10);
		}
		
		
		g.drawString(text, 8, 24);
		ImageIO.write(image,"png",out);
		
	}
}

其次我们写一个用于生成验证码图片的Servlet。

package demo1;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;



@WebServlet("/check-code.png")
public class CheckCodeServlet implements Servlet{
   

	
	@Override
	public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException {
   
		// TODO Auto-generated method stub
		ImageGenerater.write(resp.getOutputStream());
	}

	@Override
	public void destroy() {
   
		// TODO Auto-generated method stub
		
	}

	@Override
	public ServletConfig getServletConfig() {
   
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getServletInfo() {
   
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void init(ServletConfig config) throws ServletException {
   
		// TODO Auto-generated method stub
		
	}

	
}

最后就是网页代码部分了

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="./hello.do">
		<p>
	        <input name="un" type="text" placeholder="用户名">	
		</p>
		<p>
			<input name="pw" type="password" placeholder="密码框">
		</p>
		<p>
			<img src="./check-code.png">
		</p>
		<p>
			<button>登录</button>
		</p>
	</form>
</body>
</html>

来看看效果图:
在这里插入图片描述

在这里插入图片描述
打开验证码图片

张贴在2