现在网上有很多在用户登陆或注册的时候为了防止程序攻击,加入了动态验证的技术,一般是让用户输入随即生成的验证码来实现。下面是一个用Servlet生成动态验证码的一个实例,可以根据实际需要进行修改。
1、生成动态验证码的Servlet
/** 验证码图片的宽度 */ private int width = 90; /** 验证码图片的高度 */ private int height = 30; /** 验证码字符个数 */ private int codeCount = 4; /** 字符间距 */ private int x = 0; /** 字体高度 */ private int fontHeight; private int codeY; /** 随机码可生成字符 */ char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public int getCodeCount() { return codeCount; } public void setCodeCount(int codeCount) { this.codeCount = codeCount; } @Override public void execute(Context context) { codeY = height - 4; fontHeight = height - 2; x = width / (codeCount + 1); // 定义图像buffer BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = buffImg.createGraphics(); // 创建一个随机数生成器类 Random random = new Random(); // 将图像填充为白色 g.setColor(Color.WHITE); g.fillRect(0, 0, width, height); // 创建字体,字体的大小应该根据图片的高度来定。 Font font = new Font("Fixedsys", Font.PLAIN | Font.BOLD, fontHeight); // 设置字体。 g.setFont(font); // 画边框。 g.setColor(Color.BLACK); g.drawRect(0, 0, width - 1, height - 1); // 随机产生160条干扰线,使图象中的认证码不易被其它程序探测到。 g.setColor(Color.pink); for (int i = 0; i < 160; i++) { int x = random.nextInt(width); int y = random.nextInt(height); int xl = random.nextInt(12); int yl = random.nextInt(12); g.drawLine(x, y, x + xl, y + yl); } // randomCode用于保存随机产生的验证码,以便用户登录后进行验证。 StringBuffer randomCode = new StringBuffer(); int red = 0, green = 0, blue = 0; // 随机产生codeCount数字的验证码。 for (int i = 0; i < codeCount; i++) { // 得到随机产生的验证码数字。 String strRand = String.valueOf(codeSequence[random.nextInt(36)]); // 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。 red = random.nextInt(255); green = random.nextInt(255); blue = random.nextInt(255); // 用随机产生的颜色将验证码绘制到图像中。 g.setColor(new Color(red, green, blue)); g.drawString(strRand, (i + 1) * x - 6, codeY); // 将产生的codeCount个随机数组合在一起。 randomCode.append(strRand); } // 将四位数字的验证码保存到Session中。 WebContext webContext = (WebContext)context; HttpSession session = webContext.getRequest().getSession(); session.setAttribute("randomCode", randomCode.toString()); HttpServletResponse resp = webContext.getResponse(); // 禁止图像缓存。 resp.setHeader("Pragma", "no-cache"); resp.setHeader("Cache-Control", "no-cache"); resp.setDateHeader("Expires", 0); // 设置响应的类型格式为图片格式 resp.setContentType("image/jpeg"); // 将图像输出到Servlet输出流中。 ServletOutputStream sos = null; try { sos = resp.getOutputStream(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { ImageIO.write(buffImg, "jpeg", sos); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { sos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
最后,在JSP页面中加入动态生成的图片验证码.
如:
相关推荐
Java实现动态验证码生成
项目概述:动态验证码生成源码,旨在提升团队激励与沟通效率。 核心技术:本项目主要采用Python...简洁描述:本项目是一个基于Python的动态验证码生成实现,通过多种文件类型的协作,提高了团队的工作效率和沟通体验。
动态生成验证码,并可以将用户输入的验证码和自动生成的进行比对,给出比对的结果
用servlet实现动态的生成验证码,点击验证码改变,及验证码的校验,
基于PHP的中文GIF动态验证码生成器的设计与实现 (1).pdf
可用于动态生成验证码,常见于金融类app App Preview 代码原理以及说明请看这一篇博客: Android实现动态验证码的技术调研与实现 建议将宽高比设置为5:2,如果不是5:2现在会按照5:2的比例居中显示到控件 usage ...
实现了随机生成验证码 内附详细说明文档
验证码是JAVA代码自动的生成绘制,适合不用JS写验证码,实现的功能更好
Servlet仿CSDN动态验证码的生成-分加减乘三种情形,具体过程和效果看博文http://blog.csdn.net/evankaka/article/details/46597435
QT实现随机生成验证码
C# 如何自动生成验证码(Web图形验证码生成示例),相信好多人有要用哦(源码) 生成5位数字的图开验证码
把本页面放入web工程,加入IMAGE,它的imageUrl设成ValidateCode.aspx搞定,可实现随机生成验证码。验证代码:protected void btnLogin_Click(object sender, EventArgs e) { if (Session[ValidateCode....
很简单的 验证码 生成 实现 可用于 登录等需要输入验证码的地方 基于 JAVA,JSP技术
用Java写了一个4位(可多位)验证码生成器,封装在一个类里,只需调用一个方法,写入生成图片的类型和生成图片路径,可直接生成验证码,并返回验证码信息。 最简单的使用方法:解压包后,进入captcha文件夹,双击...
验证码生成程序,可应用于一般的页面中;为了测试方便写在了windows下
这是一个完整的功能,实现了动态生成验证码及验证填入信息是否正确的功能,是入门者非常不错的参考资料,是我在课堂上演示的代码。
HTML实现,有随机生成的验证码+按钮+输入框
都弄好的 按空格键生成验证码 !!!
可用于MVC、asp.net 登录注册等页面生成验证码 一般处理程序获取验证码、mvc获取验证码、切换验证码