java图片验证码

32 篇文章 1 订阅
12 篇文章 0 订阅

验证码是当下系统安全登录的一种验证方式,下面我将图片验证码的写法分享到这里,供大家参

**

验证码工具类**

package com.zy.util;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class YzmUtil {

public static void CreateYZM(HttpServletRequest request,HttpServletResponse response) throws IOException{
     //定义字符串记录验证码信息
	String  yzm="";
	
	String yzms="1234567980abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
//			    *1 准备画布
			//创建一个缓冲区  作为画布
			BufferedImage  bi=new BufferedImage(100, 38, 1);//200宽  60 高  1图片类型		
//			    *2 获取画笔
			Graphics2D  g=(Graphics2D)bi.getGraphics();
//			    *3 绘制背景
			//设置背景颜色
			g.setColor(Color.white);
			g.fillRect(1, 1, 156, 38);
//			    *4绘制图案 
			//设置字体
			Font  font=new Font(null, Font.BOLD, 22);//第一个参数  字体样式  第二个参数 加粗/斜体  第三个 字体大小
			g.setFont(font);//把字体和画笔关联
			//写字
			//设置字体颜色
			for (int i = 0; i < 4; i++) {
				//随机下标
				int index=(int)(Math.random()*yzms.length());
				//随机字符			
				char c=yzms.charAt(index);
				yzm+=c;
				//随机颜色
				Color color=getColor();
				g.setColor(color);
				//写字
				g.drawString(c+"", 24*i, 26);//第一次参数  写的内容  第二三个参数是字体的坐标
				//随机线颜色
				color=getColor();
				g.setColor(color);
				//划线
				g.drawLine(0, (int)(Math.random()*28), 160, (int)(Math.random()*28));
				
			}
			//把验证码添加到域中
			System.out.println("验证码:"+yzm);
			request.getSession().setAttribute("yzm", yzm);
			//获取response的输出流
			OutputStream out=response.getOutputStream();			
			//通过ImageIO的write方法 把缓冲区中的数据  写到目的文件中
			ImageIO.write(bi, "JPEG", out);
	}
	public static Color  getColor() {
		  int a1=(int)(Math.random()*100+120);
		  int a2=(int)(Math.random()*100+120);
		  int a3=(int)(Math.random()*100+120);
		  return new Color(a1, a2, a3);
		
	}
}

在控制层调用

//这个方法是调用验证码工具类产生一个验证码
@RequestMapping("/login/getYzm")
	public void getYzm(HttpServletRequest request,HttpServletResponse response){
		try {
			YzmUtil.CreateYZM(request, response);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
//这个方法是获取session中的验证码并返回到前台页面
@RequestMapping("/login/getSessionYzm")
@ResponseBody
public Map<String,Object> getSessionYzm(HttpSession session){
	Map<String,Object> map = new HashMap<>();
	map.put("yzm", session.getAttribute("yzm"));
	return map;
}

**

在前台页面直接通过路径访问就可以了

**

<img id="img" alt="验证码失效" title="点击换一张" src="<%=path%>/login/getYzm.do" onclick="up()">
<script type="text/javascript">
	setyzm();  //刚进来的时候先获取session中的验证码,以便登录的时候做验证
	
	//前台展示的只是一张图片,这里将后台装入session的yzm获取方便登录的时候与前台输入的做比较
	function setyzm(){ 
		$.ajax({
			url:"<%=path%>/login/getSessionYzm.do",
			type:"post",
			dataType:"json",
			success:function(data){
				yzm = data.yzm;
				document.getElementById("yyy").value=yzm;
			}
		});
	}
	//这个方法是点击更新验证码或者当输入的验证码与session中的验证码不匹配时重新获取验证码
	function up(){
		var date = new Date();
		$("#img").attr("src","<%=path%>/login/getYzm.do?date="+date);
		setyzm();
	}
	</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阁下大名

您的鼓励就是我前进的动力,谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值