直接切入主题,2年前写的一个图片码,记录一下。
1 生成图片码主类:RandomCode
3 编写一个loginservlet
在loginservlet过滤中 加入这个就行了,jsp页面提交到loginservlet
在post中加入
4 web.xml
1 生成图片码主类:RandomCode
package com.gpdi.util; /** * @Description: 图片码 * @author: jy * @CreateTime: Sep 19, 2010 10:01:46 PM * */ import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; 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; /** * Servlet implementation class RandomCode */ public class RandomCode extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 验证码图片的宽度。 int width = 64; // 验证码图片的高度。 int height = 25; BufferedImage buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = buffImg.createGraphics(); // 创建一个随机数生成器类。 Random random = new Random(); // 设定图像背景色(因为是做背景,所以偏淡) g.setColor(getRandColor(200, 250)); g.fillRect(0, 0, width, height); // 创建字体,字体的大小应该根据图片的高度来定。 Font font = new Font("Times New Roman", Font.BOLD, 18); // 设置字体。 g.setFont(font); // 画边框。 g.setColor(Color.BLACK); g.drawRect(0, 0, width - 1, height - 1); // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到。 //g.setColor(Color.GRAY); g.setColor(getRandColor(160,200)); for (int i = 0; i < 155; 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(); // 设置默认生成4个验证码 int length = 4; // 设置备选验证码:包括"a-z"和数字"0-9" String base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; int size = base.length(); // 随机产生4位数字的验证码。 for (int i = 0; i < length; i++) { // 得到随机产生的验证码数字。 int start = random.nextInt(size); String strRand = base.substring(start, start + 1); // 用随机产生的颜色将验证码绘制到图像中。 // 生成随机颜色(因为是做前景,所以偏深) //g.setColor(getRandColor(1, 100)); //调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); g.drawString(strRand, 15 * i + 6, 24); // 将产生的四个随机数组合在一起。 randomCode.append(strRand); } // 将四位数字的验证码保存到Session中。 HttpSession session = request.getSession(); session.setAttribute("rand", randomCode.toString()); //图象生效 g.dispose(); // 禁止图像缓存。 response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); response.setContentType("image/jpeg"); // 将图像输出到Servlet输出流中。 ServletOutputStream sos = response.getOutputStream(); ImageIO.write(buffImg, "jpeg", sos); sos.flush(); sos.close(); } Color getRandColor(int fc, int bc) {// 给定范围获得随机颜色 Random random = new Random(); if (fc > 255) fc = 255; if (bc > 255) bc = 255; int r = fc + random.nextInt(bc - fc); int g = fc + random.nextInt(bc - fc); int b = fc + random.nextInt(bc - fc); return new Color(r, g, b); } }
2 index.jsp页面加入 <td height="20" align="right"> [b]验 证 码[/b]: </td> <td height="30" align="left"> <input type="text" name="code" style="width:55px"> </td> <td> <img src="RandomCode" id="img"> </td> <td style="color:#1686BC"> [url=#]看不清,换一张[/url]</td>
3 编写一个loginservlet
在loginservlet过滤中 加入这个就行了,jsp页面提交到loginservlet
在post中加入
String code = request.getParameter("code"); HttpSession session = request.getSession(); if (!code.equalsIgnoreCase((String) session.getAttribute("rand"))) { request.setAttribute("errormsg", "验证码输入错误!"); request.getRequestDispatcher("index.jsp").forward(request, response); return; }
4 web.xml
<servlet> <description></description> <display-name>RandomCode</display-name> <servlet-name>RandomCode</servlet-name> <servlet-class>com.gpdi.util.RandomCode</servlet-class> </servlet> <servlet-mapping> <servlet-name>RandomCode</servlet-name> <url-pattern>/RandomCode</url-pattern> </servlet-mapping>
发表评论
-
12306模型设计探讨
2016-04-28 14:10 699春节期间,无意中看到 ... -
Dubbo与Zookeeper、SpringMVC整合
2016-03-18 16:31 867互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构 ... -
TCP/IP,http,socket,长连接,短连接
2016-03-18 16:22 811TCP/IP TCP/IP是个协议组,可分为三个层次:网络层 ... -
移动互联网App客户端服务端通信安全问题。
2016-01-20 12:13 1619作为一个移动互联网App,天生是需要和服务器通信的。那么,服 ... -
前后端分离开发部署模式
2015-12-12 11:10 9808这周着手开始重新构 ... -
Jenkins + Git + Maven + tomcat集成环境(转)
2015-11-07 11:01 12578折腾了好几天,终于吧Jenkins + Git ... -
Apache Commons(转)
2012-08-31 11:36 834Apache Commons包含了很多开源的工具,用于解决平时 ... -
Cron 常用表达式
2012-08-31 11:34 2943Cron 常用表达式 <SELECT NAME=&qu ... -
httpSession的正确理解
2012-07-20 12:43 854httpSession的正确理解 ... -
利用Session防止表单重复提交
2012-07-20 10:01 3091为什么需要防止表单重复提交呢? 重复提交不仅仅是验证的问题 ... -
jnlp
2012-05-08 10:59 4509java提供的一种让你可以通过浏览器直接执行java应用程序的 ... -
Spring Quartz 调度与Jdk Timer
2012-05-08 10:14 1894,最近经历的几个项目大多里面都使用到Spring Quart ... -
Dozer 深层次复制
2012-05-07 15:04 7895最近在做项目上遇到了 ... -
使用FreeMarker生成java代码
2012-05-07 14:36 36831 编写ftl模版; 2 编写java生成类(主要用来设置好 ...
相关推荐
Win8 系统 PIN 码与图片密码的创建 Win8 系统中的 PIN 码和图片密码是两种不同的密码锁定方式,以下是关于这两种密码的详细介绍: PIN 码创建 在 Windows 8 中, PIN 码由四个数字组成,可以在“电脑设置”中进行...
Windows 8 中的图片密码设置是指用户可以使用图片代替传统的密码或PIN码来登录 Windows 系统。这种方法可以提高登录安全性和便捷性。本文将详细介绍如何设置 Windows 8 图片密码。 前提条件 在设置图片密码之前,...
### Win8创建图片密码与Pin码 #### 图片密码 **图片密码**是Windows 8引入的一种创新安全机制,旨在为触控设备提供更直观、更便捷的解锁方式。相较于传统的字符密码,图片密码利用了用户的图形记忆能力,使得密码...
在Windows 8操作系统中,微软引入了两种创新的登录方式,即图片密码和PIN码,以提供更加便捷和个性化的安全验证。这两种方法都是为了适应触摸设备的操作需求,特别是对于移动设备用户而言,它们提供了更快速的解锁...
在这个步骤,你需要从你的图片库中挑选一张清晰且不复杂的图片,因为这张图片将作为你设置图案密码的基础。避免选择过于花哨或难以辨认的图片,以免日后忘记密码。 7. 选好图片后,系统会引导你创建图案密码。你...
"文件上传图片码 editor 解释器"这个主题主要涉及到的是在IT行业中,特别是软件开发和文本编辑领域的一些关键概念和技术。这里的"editor"通常指的是文本编辑器,它是一种用于创建、查看和修改文本文件的软件工具,...
在C#开发中,识别图片中的条形码是一项常见的任务,尤其在自动化处理、物流管理、商品追踪等领域。本文将深入探讨如何利用C#进行图片条形码的识别,并涉及相关的技术、库和最佳实践。 一、条形码类型与标准 条形码...
在PowerBuilder(PB)环境中生成Code128条形码图片,可以帮助开发者在软件中实现数据的快速识别和记录。本篇将详细介绍如何在PB9版本中创建Code128条形码图像。 首先,了解Code128条形码的基本结构和特点: 1. Code...
在Windows 8操作系统中,为确保用户账户的安全,系统提供了多种登录验证方式,包括传统的密码登录、PIN码登录以及更具创新性的图片密码。下面将详细解释这些登录方式的创建过程和使用方法。 **PIN码创建** PIN码是...
标题中的“vb编写的条形码生成程序,支持生成图片”指的是使用Visual Basic(VB)编程语言开发的一个软件,该软件具有生成条形码的功能,并且能够将生成的条形码以图像格式导出或显示。条形码是一种广泛应用于商品、...
然而,尽管这些新密码功能提供了额外的便利,但用户仍需谨慎设置,避免选择过于简单的PIN码或容易被他人模仿的图片手势,以防止账户被盗。总的来说,Windows 8的密码功能升级,不仅提升了用户体验,也在安全性方面...
在本场景中,"128码图片输出"是指利用Qt的编程能力,将128码编码成QImage格式的图片,QImage是Qt库中用于处理图像的核心类。 Qt库提供了丰富的图形处理功能,包括图像的读取、显示、编辑和保存。在生成128码图片的...
Windows 8作为微软推出的一款重要操作系统,不仅提供了传统数字密码、PIN码等常见身份验证方式,还创新性地引入了图片密码这一独特功能。本文将详细介绍如何在Windows 8上成功设置并使用图片密码。 #### 一、准备...
在这个场景中,我们关注的是如何使用C#编程语言以及ZXing库(也称为ZXing.Net)来识别图片中的条形码。ZXing,全称“Zebra Crossing”,是一个开源的、多平台的条形码和二维码读取库,支持多种格式,如QR码、Code ...
生成图片印证码,有干扰。生成图片印证码,有干扰。仅供产考。。。
本话题将深入探讨如何使用C++语言来生成并保存格雷码图片。 首先,我们要理解格雷码的生成原理。最简单的格雷码生成方法是通过反射格雷码(reflected Gray code)规则,也称为循环移位格雷码。对于n位格雷码,其第i...
在IT行业中,生成一维码或条形码的图片是一项常见的任务,特别是在物流、库存管理、产品标识等领域。本文将详细讲解如何使用Java语言来批量生成一维码图片,以及可能遇到的问题和解决方案。 首先,Java中实现一维码...
最好的ascII码图片最好的ascII码图片最好的ascII码图片最好的ascII码图片最好的ascII码图片最好的ascII码图片最好的ascII码图片最好的ascII码图片最好的ascII码图片最好的ascII码图片最好的ascII码图片最好的ascII码...
检测图片上的条形码使用 Python 和 OpenCV 本文主要介绍了如何使用 Python 和 OpenCV 检测图片上的条形码。文章首先描述了黑色星期五的混乱场景,然后引入了使用 Python 和 OpenCV 检测图片上的条形码的技术。该...
4. 接下来,你需要在图片上绘制至少三个手势,这些手势可以是直线、圆形或点,它们的位置、大小和方向都将作为密码的一部分。 5. 画完手势后,再次确认你的手势路径,确保无误后点击“完成”。 6. 最后,再次验证你...