分布式机器 extjs6.5 string express perl dll shiny ros 打印 static laravel4 vue学习 jquery选择器找子元素 js获取焦点事件 kb转mb java清空数组 jquery validate java基础 javalabel java写入文件 java中的继承 java环境部署 java环境变量配置 java的socket通信 java时间转换 java泛型的使用 java语言编程 java获取当前日期 java配置文件 java游戏开发教程 flash实例教程 计算机操作系统第四版 microkms 神龙kms 迅雷去广告版 lol体验服转换器 野德天赋 社区网格化管理平台 大势至usb监控 python数组赋值 qq浏览器手机版
当前位置: 首页 > 学习教程  > 编程语言

工具类之------验证码及其校验

2020/12/5 11:01:14 文章标签:

为了实现验证码校验,需要进行如下操作: 1.制作验证码的工具类 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; impor…

为了实现验证码校验,需要进行如下操作:

1.制作验证码的工具类

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/checkCodeServlet")
public class CheckCodeServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
		
		//服务器通知浏览器不要缓存
		response.setHeader("pragma","no-cache");
		response.setHeader("cache-control","no-cache");
		response.setHeader("expires","0");		
		//可以根据需求自行设置宽高(此处创建一个宽80,高30的图片)
		int width = 80;
		int height = 30;
		BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
		
		//获取画笔
		Graphics g = image.getGraphics();
		//设置画笔颜色(背景色)
		g.setColor(Color.GRAY);
		//填充图片
		g.fillRect(0,0, width,height);
		
		//产生4个随机验证码,12Ey
		String checkCode = getCheckCode();
		//将验证码存入Session
		request.getSession().setAttribute("CHECKCODE_SERVER",checkCode);
		
		//设置画笔颜色(验证码色)
		g.setColor(Color.YELLOW);
		//设置字体的小大
		g.setFont(new Font("黑体",Font.BOLD,24));
		//向图片上写入验证码
		g.drawString(checkCode,15,25);
		
		ImageIO.write(image,"PNG",response.getOutputStream());
	}
	//产生随机数
	private String getCheckCode() {
		String base = "0123456789ABCDEFGabcdefg";
		int size = base.length();
		Random r = new Random();
		StringBuffer sb = new StringBuffer();
		for(int i=1;i<=4;i++){
			int index = r.nextInt(size);
			char c = base.charAt(index);
			sb.append(c);
		}
		return sb.toString();
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doGet(request,response);
	}
}

2.让验证码动起来

<!--body部分  -->
<div class="col-sm-3">
	<input type="text" class="form-control" id="yzm" name="yzm" placeholder="请输入验证码"><span>${log_msg}</span>
</div>
<div class="col-sm-3">
	<a href="javascript:changeImg()"><img src="${pageContext.request.contextPath }/checkCodeServlet" title="看不清点击刷新" id="vcode"/></a>
</div>

<!--js部分  -->
<script>
	function changeImg(){
	//获取图像标签对象
	var img = document.getElementById("vcode") ;
	//更改src属性 +时间戳 时间毫秒值
	img.src = "${pageContext.request.contextPath}/checkCodeServlet?time="+new Date().getTime() ;	
}
</script>

<!--注:可直接引用 -->

3.应用(举个小栗子)

public String code(HttpServletRequest request, HttpServletResponse response) throws IOException {
		//前台获取验证码(上步中文本框里面输入的内容)
		String yzm = request.getParameter("yzm");
		//从工具类CheckCodeServlet中获取存储在session中的验证码
		String jy = (String) request.getSession().getAttribute("CHECKCODE_SERVER");
		//每次获取之后进行移除,保证刷新及时性
		request.getSession().removeAttribute("CHECKCODE_SERVER");
		// 后台打印查看是否获取到(可省略)
		System.out.println(yzm);
		System.out.println(jy);
		//判断验证码是否存在,进行相关跳转
		//如果不存在,跳转到当前页面,并做相关信息提示
		if (!jy.equalsIgnoreCase(yzm) || yzm == null || jy == null) {
			request.setAttribute("log_msg", "验证码输入错误");
			return "jsp/login.jsp";
		}
		//如果存在进行接下来的判断,相关跳转或重定向
		----------------
}:可应用于注册登录时的校验,此例仅展示了验证码部分的内容(后续登录注册部分进行完整操作引用)

本文链接: http://www.dtmao.cc/news_show_450377.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?