JAVA常用工具类-【7】生成随机验证码

该博客介绍了如何在登录页面生成和通过邮箱发送验证码。首先,通过Java创建内存中的随机背景图片,设置颜色和字体,然后在图片上绘制随机字符串作为验证码。生成的验证码保存在session中,同时图片以JPEG格式返回给浏览器。对于邮箱发送验证码,同样生成验证码,保存到session,并根据用户提供的邮箱地址通过邮件服务发送验证码。邮件发送提供了对常用邮件地址的快捷选项。
摘要由CSDN通过智能技术生成

1、通过图片在登录页生成验证码

package com.day.util;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import com.day.pojo.MySession;
import com.day.pojo.SystemSession;
import com.day.util.mail.MailUtil;
public class MakeCode extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(req,resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		resp.setContentType("text/html");
		req.setCharacterEncoding("UTF-8");
		resp.setCharacterEncoding("UTF-8");
		//6禁止缓存随机图片
		resp.setDateHeader("Expires", -1);
		resp.setHeader("Cache-Control", "no-cache");
		resp.setHeader("Pargam","no-cache");

		//7通知客户机以图片的方式打开发送过去的数据
		resp.setHeader("Content-Type", "image/jpeg");

		//1在内存中创建背景图片
		//BufferedImage bufferedImage=new BufferedImage(70,22,BufferedImage.TYPE_INT_RGB);
		BufferedImage bufferedImage=new BufferedImage(63,22,BufferedImage.TYPE_INT_RGB);
		//2向图片上写数据
		Graphics graphics=bufferedImage.getGraphics();

		//3设置背景色
		graphics.setColor(new Color(79,148,205));
		//graphics.fillRect(0, 0, 70, 22);
		graphics.fillRect(0, 0, 63, 22);

		//设置写入数据的颜色和字体
		graphics.setColor(Color.white);
		graphics.setFont(new Font(null, Font.ITALIC, 20));

		//4向图片写数据
		String temp=makeRandom();//temp如果是汉字或者是一个数学题库都可以生成的
		//随机产生的值保存到session
		SystemSession systemSession=null;
		if(req.getSession().getAttribute("systemSession")==null){
			systemSession=new SystemSession();
		}else{
			systemSession=(SystemSession) req.getSession().getAttribute("systemSession");
		}
		systemSession.setVerifyCode(temp);//设置到会话中去
		req.getSession().setAttribute("systemSession", systemSession);//设置系统产生会话
		//设置一个隐藏参数ajax请求后返回对比,这是"历史性"的一步
		
		graphics.drawString(temp, 5, 20);

		//5把写好的图片数据给浏览器
		ImageIO.write(bufferedImage, "jpg", resp.getOutputStream());
	}
	//产生4位随机数
	public String makeRandom(){
		Random random=new Random();
		//明显9999999和7控制了  到底产生几位数
		String temp=random.nextInt(9999)+"";
		StringBuffer sringBuffer=new StringBuffer();
		for(int i=0;i<4-temp.length();i++){//为什么随机数不够7位补充0用的
			sringBuffer.append("0");
		}
		temp=temp+sringBuffer.toString();
		return temp;
	}
}

2、通过邮箱发送生成的验证码

package com.day.util;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import javax.swing.RepaintManager;
import com.day.pojo.MySession;
import com.day.pojo.SystemSession;
import com.day.util.mail.MailUtil;
public class MakeEmailCode extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(req,resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		resp.setContentType("text/html");
		req.setCharacterEncoding("UTF-8");
		resp.setCharacterEncoding("UTF-8");
		//6禁止缓存随机图片
		resp.setDateHeader("Expires", -1);
		resp.setHeader("Cache-Control", "no-cache");
		resp.setHeader("Pargam","no-cache");
		
		//7通知客户机以图片的方式打开发送过去的数据
		resp.setHeader("Content-Type", "image/jpeg");
		
		//1在内存中创建背景图片
		//BufferedImage bufferedImage=new BufferedImage(70,22,BufferedImage.TYPE_INT_RGB);
		BufferedImage bufferedImage=new BufferedImage(63,22,BufferedImage.TYPE_INT_RGB);
		//2向图片上写数据
		Graphics graphics=bufferedImage.getGraphics();
		
		//3设置背景色
		graphics.setColor(Color.pink);
		//graphics.fillRect(0, 0, 70, 22);
		graphics.fillRect(0, 0, 63, 22);
		
		//设置写入数据的颜色和字体
		graphics.setColor(Color.black);
		graphics.setFont(new Font(null, Font.BOLD, 20));
		
		//4向图片写数据
		String temp=makeRandom();//temp如果是汉字或者是一个数学题库都可以生成的
		//随机产生的值保存到session
		SystemSession systemSession=null;
		if(req.getSession().getAttribute("systemSession")==null){
			systemSession=new SystemSession();
		}else{
			systemSession=(SystemSession) req.getSession().getAttribute("systemSession");
		}
		systemSession.setEmailVerifyCode(temp);//设置系统产生会话
		if(req.getParameter("email")!=null){
			if(req.getParameter("email").equals("常用邮件")){
				MailUtil.sendMail("wdfgdzx@126.com", "来自wdfgdzx.top注册验证码", "您的注册验证码是:"+temp);
			}else{
				MailUtil.sendMail(req.getParameter("email"), "来自wdfgdzx.top注册验证码", "您的注册验证码是:"+temp);
			}
		}
		req.getSession().setAttribute("systemSession", systemSession);//设置系统产生会话
		//设置一个隐藏参数ajax请求后返回对比,这是"历史性"的一步
		resp.getWriter().write("<input type='hidden' value="+temp+" id='emailVerifyCode' />");
		//graphics.drawString(temp, 5, 20);
		//5把写好的图片数据给浏览器
		/*ImageIO.write(bufferedImage, "jpg", resp.getOutputStream());*/
	}
	//产生7位随机数
	public String makeRandom(){
		Random random=new Random();
		//明显9999999和7控制了  到底产生几位数
		String temp=random.nextInt(9999)+"";
		StringBuffer sringBuffer=new StringBuffer();
		for(int i=0;i<4-temp.length();i++){//为什么随机数不够7位补充0用的
			sringBuffer.append("0");
		}
		temp=temp+sringBuffer.toString();
		return temp;
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值