验证码实现

Controller中

@ResponseBody
	@RequestMapping(value = "/changeValidateKey")
	public String addRoleView(HttpServletRequest request, HttpServletResponse response) throws Throwable {
		String str = ZJ_GeneratorUtils.getRandomNumString(6);
		request.getSession().setAttribute("vk", str);
		return str;
	}

	@ResponseBody
	@RequestMapping(value = "/validateImg")
	public void validateImg(HttpServletRequest request, HttpServletResponse response) throws Throwable {
		Map<String, BufferedImage> map = ZJ_ValiCodeUtils.createImage();
		String code = map.keySet().iterator().next();
		request.getSession().setAttribute("vk", code);
		BufferedImage image = map.get(code);
		// 设置页面不缓存
		response.setHeader("Pragma", "No-cache");
		response.setHeader("Cache-Control", "no-cache");
		response.setDateHeader("Expires", 0);
		ImageIO.write(image, "JPEG", response.getOutputStream());
	}

	@ResponseBody
	@RequestMapping(value = "/validateKey")
	public String validateCode(HttpServletRequest request, HttpServletResponse response) throws Throwable {
		String vk = "";
		if (null != request.getSession().getAttribute("vk")) {
			vk = request.getSession().getAttribute("vk").toString();
		}
		return vk;
	}

工具类

package com.yfapp.platform.utils;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

public final class ZJ_ValiCodeUtils {

	// 产生多少字符
	private static final int SIZE = 4;
	// 干扰线数量
	private static final int LINES = 80;
	// 图片宽
	private static final int WIDTH = 160;
	// 图片高
	private static final int HEIGHT = 50;
	// 字体大小
	private static final int FONT_SIZE = 40;

	public static String getRandomStr() {
		String randomString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		StringBuffer sb = new StringBuffer();
		Random ran = new Random();
		// 画随机字符
		for (int i = 1; i <= SIZE; i++) {
			int r = ran.nextInt(randomString.length());
			sb.append(randomString.charAt(r));
		}
		return sb.toString();
	}

	public static Map<String, BufferedImage> createImage() {
		Random ran = new Random();
		BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
		Graphics graphic = image.getGraphics();
		graphic.setColor(Color.WHITE);
		graphic.fillRect(0, 0, WIDTH, HEIGHT);
		String randomStr = getRandomStr();
		// 画随机字符
		for (int i = 1; i <= SIZE; i++) {
			graphic.setColor(getRandomColor());
			graphic.setFont(new Font("Atlantic Inline", Font.BOLD + Font.ROMAN_BASELINE, FONT_SIZE));
			graphic.drawString(randomStr.charAt(i - 1) + "", (i - 1) * WIDTH / SIZE, HEIGHT - (HEIGHT - FONT_SIZE) / 2);
		}
		// 画干扰线
		for (int i = 1; i <= LINES; i++) {
			graphic.setColor(getRandomColor());
			int x1 = ran.nextInt(WIDTH);
			int y1 = ran.nextInt(WIDTH);
			int x2 = x1 + ran.nextInt(20) - 20;
			int y2 = y1 + ran.nextInt(20) - 20;
			graphic.drawLine(x1, y1, x2, y2);
		}
		Map<String, BufferedImage> map = new HashMap<String, BufferedImage>();
		map.put(randomStr, image);
		return map;
	}

	public static Color getRandomColor() {
		Random ran = new Random();
		Color color = new Color(ran.nextInt(256), ran.nextInt(256), ran.nextInt(256));
		return color;
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值