输出随机认证码图片准备工作:建立javaweb工程名为servlet1,在工程下建立包cn.response,在包下建立servlet名为:ResponseDemo3.java ;并在工程下建立loginweb.jsp
1.ResponseDemo3.java 代码如下:
package cn.response; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; 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.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * * @author 飞鸟 * Date: 2014-2-18 * project_name: servlet1 * file_name: ResponseDemo3.java * 输出随机认证码图片 */ public class ResponseDemo3 extends HttpServlet { public static final int WIDTH=120; public static final int HEIGHT=25; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { BufferedImage image=new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB); Graphics g=image.getGraphics(); //1.设置背景色 setBackGround(g); //2.设置边框 setBorder(g); //3.画干扰线 drawRandomLine(g); //4.写随机数 drawRandomNum((Graphics2D)g); //5.图形写给浏览器 response.setContentType("image/jpeg"); //发头控制浏览器不要缓存 response.setDateHeader("expries",-1); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache"); ImageIO.write(image, "jpg", response.getOutputStream()); } private void setBackGround(Graphics g) { g.setColor(Color.WHITE); g.fillRect(0,0,WIDTH,HEIGHT); } private void setBorder(Graphics g) { // TODO Auto-generated method stub g.setColor(Color.BLUE); g.drawRect(1, 1, WIDTH-2, HEIGHT-2); } private void drawRandomLine(Graphics g) { // TODO Auto-generated method stub g.setColor(Color.GREEN); for(int i=0;i<5;i++){ int x1=new Random().nextInt(WIDTH); int y1=new Random().nextInt(HEIGHT); int x2=new Random().nextInt(WIDTH); int y2=new Random().nextInt(HEIGHT); g.drawLine(x1, y1, x2, y2); } } private void drawRandomNum(Graphics2D g) { // TODO Auto-generated method stub g.setColor(Color.RED); g.setFont(new Font("宋体",Font.ITALIC,20)); String base="\u7684\u4e00\u4e86\u662f\u6211\u4e0d\u5728\u4eba\u4eec\u6709\u6765\u4ed6\u8fd9\u4e0a\u7740\u4e2a\u5730\u5230\u5927\u91cc\u8bf4\u5c31\u53bb\u5b50\u5f97"+ "\u4e5f\u548c\u90a3\u8981\u4e0b\u770b\u5929\u65f6\u8fc7\u51fa\u5c0f\u4e48\u8d77\u4f60\u90fd\u628a\u597d\u8fd8\u591a\u6ca1\u4e3a\u53c8\u53ef\u5bb6\u5b66"+ "\u53ea\u4ee5\u4e3b\u4f1a\u6837\u5e74\u60f3\u751f\u540c\u8001\u4e2d\u5341\u4ece\u81ea\u9762\u524d\u5934\u9053\u5b83\u540e\u7136\u8d70\u5f88\u50cf\u89c1"; int x=5; for(int i=0;i<4;i++){ int degree=new Random().nextInt()%30; String cn= base.charAt(new Random().nextInt(base.length()))+""; g.rotate(degree*Math.PI/180,x,20); g.drawString(cn, x, 20); g.rotate(-degree*Math.PI/180,x,20); x+=30; } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } }
2.login.jsp代码
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title>
<script type="text/javascript""> function changeImage(img){ img.src=img.src+"?"+new Date().getTime(); } </script>
</head> <body> <form name="form1" action="dologin.jsp" method="post"> <label>用户名</label><input type="text" name="username"><br/> <label>密 码</label><input type="password" name="password"><br/> <label>验证码</label><input type="text" name="checkcode"><img src="/servlet1/ResponseDemo3" onclick="changeImage(this)" alt="换一张" style="cursor:hand"><br/> <input type="submit" name="submit" value="提交"> <input type="reset" name="reset" value="清除"> </form> </body> </html>
相关推荐
验证码图片的生成涉及到图形学知识,可以使用Java的`java.awt`和`javax.imageio`包。创建一个`BufferedImage`对象,设置背景色,然后在画布上绘制随机颜色的线条以增加干扰。接着,将随机生成的字符绘制到图片上,...
MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,可以将任意长度的输入转化为固定长度的输出,通常用于数据校验和密码存储。然而,由于MD5的碰撞攻击弱点,直接使用MD5来存储密码已经不够安全。为了...
Java的`BufferedImage`类可以帮助我们完成这一过程,通过`ImageIO.write()`方法将其写入文件或输出流。 6. **验证用户输入**:服务器端需要保存生成的数学问题和答案,当用户输入他们的猜测时,验证其是否正确。 `...
Java作为一种广泛使用的编程语言,提供了丰富的库和方法来实现随机序列码的生成。本篇将详细讲解如何利用Java实现这一功能,以及涉及到的相关技术点。 首先,我们要理解什么是序列码。序列码通常是指一串由数字、...
首先,`commons-lang.jar`是一个由Apache Commons项目提供的Java类库,它包含了大量方便实用的工具类,其中包括用于生成随机字符串的工具。在Java中,我们可以使用`org.apache.commons.lang3.RandomStringUtils`类来...
随机生成手机验证码的java源码文件,结果是在后台输出,可根据选择生成几位随机码或者随机码是否带有字母。
总之,`RandomCharacter`类提供了一种便捷的方式来生成随机的字母和数字,而`RandomCharacterTest`类则负责验证其正确性。对于初学者来说,这样的实践有助于理解和掌握Java中的随机数生成和单元测试。通过不断练习和...
在本次的Java实训作业“Java随机抽号实训作业”中,我们将聚焦于Java编程语言中的随机数生成和处理,这是编程领域中一个基础且实用的知识点。Java提供了强大的API来支持随机数的生成,这对于模拟、游戏开发、数据...
util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...
util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...
在Java中,我们可以通过编写特定的代码逻辑来生成看似随机但实际上与特定信息(如用户ID、计算机硬件信息等)关联的注册码。 首先,我们需要理解注册码通常包含哪些信息。一个典型的注册码可能包括以下部分: 1. *...
### 随机生成6位数的Java实现 在日常的软件开发过程中,经常会遇到需要生成随机数的需求,比如验证码、密码或者简单的编号等场景。本文将深入解析一个简单的Java程序,该程序能够生成随机的6位数字字符串,并探讨其...
util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...
验证码图片的安全性是非常重要的,需要确保验证码图片的随机性和唯一性,避免验证码图片被猜测或攻击。可以使用加密算法和安全协议来保护验证码图片的安全。 知识点7: SpringMVC的Request和Response对象 在...
这种方法可以生成一个唯一的数值,用于后续的注册码验证过程。 #### 5. 字符串变换算法 `change`方法实现了一个简单的字符替换算法,该算法会遍历输入字符串中的每个字符,并根据不同的字符范围进行替换: - 数字...
凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...
### JSP实现彩纹随机码的关键知识点 #### 1. 设置响应类型和头部信息 JSP页面通过`<%@ page contentType="image/jpeg" %>`设置响应内容类型为图像JPEG格式,这确保了浏览器会正确地显示图像而非文本。同时,通过`...
在Java中生成验证码,我们可以利用图像处理库来创建带有随机字符的图片,同时添加干扰元素以增加破解难度。下面我们将详细探讨如何使用Java实现验证码的自动生成。 首先,我们需要导入一些必要的库,如`java.awt`和...
凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...