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;
}
}