一般在生成验证码,有两种形式:
- 前端js生成,并在前端验证通过,提交表单到后台。安全性较低,很容易被识别
- 后端生成返回给前端展示,提交用户验证码到后台验证通过。安全性较前端方式高,因为整个验证过程在后台。
其实验证码也没有绝对的安全,只能说后端的处理方式比前端好一些而已,所以这个示例是利用java后台生成二维码图片,并返回给前端base64格式,展示给用户,后台将二维码真值保存在session,用户提交输入的验证码和保存的真值做比较,然后返回前台是否验证成功。
1.创建一个验证码生成工具类。此类为静态类,
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.Random;
import javax.imageio.ImageIO;
import org.apache.commons.lang3.RandomUtils;
import com.alibaba.druid.util.Base64;
/**
*
* @ClassName: ValidateCodeUtil
* @Description: 验证码生成工具类
* @author chenhx
* @date 2017年11月14日 上午11:00:07
*/
public class ValidateCodeUtil {
private static Validate validate = null; //验证码类,用于最后返回此对象,包含验证码图片base64和真值
private static Random random = new Random(); //随机类,用于生成随机参数
private static String randString = "0123456789abcdefghijkmnpqrtyABCDEFGHIJLMNQRTY";//随机生成字符串的取值范围
private static int width = 80; //图片宽度
private static int height = 34; //图片高度
private static int StringNum =