在登录模块中经常要使用到验证码机制来防止破坏者恶意注册及登录,在此留一份备份以备日后回忆。
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@SuppressWarnings("serial")
public class ImageCaptchaServlet extends HttpServlet {
private static final int WIDTH = 72;
private static final int HEIGHT = 30;
private static final int NUM = 4;
private static final String CODES = "0123456789";
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
// 获取会话Session
HttpSession session = request.getSession();
// 设置缓存及响应类型
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");
// 创建一张图片
BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
// 设置白色背景
g.setColor(Color.WHITE);
g.fillRect(0, 0, WIDTH, HEIGHT);
// 画边框
g.setColor(new Color(0xC1C1C1));
g.drawRect(0, 0, WIDTH - 1, HEIGHT - 1);
// 画干扰点
Random random = new Random();
for (int i = 0; i < 100; i++) {
g.setColor(new Color(0xC1C1C1));
g.drawOval(random.nextInt(WIDTH), random.nextInt(HEIGHT), 1, 1);
}
// 生成随机函数
char[] rand = new char[NUM];
for (int i = 0; i < NUM; i++) {
rand[i] = CODES.charAt(random.nextInt(CODES.length()));
}
String code = new String(rand);
// 显示验证码显示的样式
g.setFont(new Font("Consolas", Font.BOLD, 30));
g.setColor(new Color(0x999999));
// 显示验证码
g.drawString(code, 2, 25);
// 生成图片
g.dispose();
// 设置响应大小
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ImageIO.write(image, "JPEG", byteOut);
byte[] buffer = byteOut.toByteArray();
response.setContentLength(buffer.length);
// 输出给浏览器
ServletOutputStream out = response.getOutputStream();
out.write(buffer);
// 关闭输出流
byteOut.close();
out.close();
//把验证码写入Session
session.setAttribute("check_code", code);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
doGet(request, response);
}
}
分享到:
相关推荐
通过Servlet生成图片验证码,提供给jsp页面展示,并验证。
登陆验证+servlet动态生成图片验证码
Java servlet 自动生成 图片验证码 生成 Java源码
servlet生成验证码图片
java web笔记之servlet生成验证码java web笔记之servlet生成验证码
使用Servlet生成验证码图片。 一个生成验证码图片的工具类。
java后台根据随机数生成验证码,js调用,点击可以换验证码。测试效果:完全正常使用,Servlet能获取生成的验证码和用户输入的验证码。
在servlet中动态生成验证码图片,可被JSP或servlet引用,每次刷新都会改变验证码
java生成图片验证码
利用jsp生成图片验证码,没有用到servlet
Java生成图片验证码 Java代码
servlet生成图片验证码简单的实现。 ps:摘自Javaweb王者归来
Servlet随即产生验证码,在页面显示。通过Servlet验证。简单实用。
通过servlet生成验证码的小工具类,使用时在web.xml里面配置,页面上引用时利用img标签引用这个servlet就可以实现验证码实例: <img src="checkCode.do" id="img" height="30px"></a> 实现点击图片时更换验证码
主要介绍了Javaweb开发中通过Servlet生成验证码图片的相关资料,需要的朋友可以参考下
servlet+jsp实现验证码 具体步骤: 生成图片所要实现的类 1、定义BufferedImage对象 2、获得Graphics对象 3、使用Random生成随机验证码信息 4、使用Graphics绘制图片 5、记录验证信息到...6、使用ImageIO生成图片