java 验证码的实现 以及 使用
2011-04-15 16:13
375 查看
本文介绍一下web开发中常用的验证码的设计及使用。
image.jsp 用于生成验证码,login.jsp 使用验证码,validate.jsp 用于验证用户输入的验证码是否正确。
image.jsp如下:
login.jsp 如下:
validate.jsp 如下:
image.jsp 用于生成验证码,login.jsp 使用验证码,validate.jsp 用于验证用户输入的验证码是否正确。
image.jsp如下:
<%@ page contentType="image/jpeg" import="java.awt.*, java.awt.image.*,java.util.*,javax.imageio.*" %> <%@ page language="java" pageEncoding="utf-8"%> <%! //生成随机颜色 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); } %> <% response.setHeader("Pragma","No-cache");//设置http消息头,禁用缓存 response.setHeader("Cache-Control","no-cache"); response.setDateHeader("Expires", 0); //设置缓存过期时间 int width=60, height=20; //矩形图像的长宽 BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//创建图像缓冲区 Graphics g = image.getGraphics(); //创建图像 g.setColor(getRandColor(200,250)); //设置图形上下文的当前颜色--用于填充背景 g.fillRect(0, 0, width, height); //使用图形上下文的当前颜色填充矩形 g.setFont(new Font("Times New Roman",Font.PLAIN,18));//将此图形上下文的字体设置为指定字体 g.setColor(getRandColor(160,200)); //设置图形上下文的当前颜色--用于画噪音线 Random random = new Random(); for (int i=0;i<155;i++) //画155条噪音线 { 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); } String sRand=""; for (int i=0;i<4;i++){ //画0-10之间的4个随机数 String rand=String.valueOf(random.nextInt(10)); sRand+=rand; //g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); g.setColor(getRandColor(20,130)); g.drawString(rand,13*i+6,16); //横坐标从6像素开始,字符间隔13像素 } g.dispose(); //释放此图形的上下文以及它使用的所有系统资源 session.removeAttribute("rand"); session.setAttribute("rand",sRand);//将4个随机数添加到当前会话中 ImageIO.write(image, "JPEG",response.getOutputStream() );//将image按jpeg格式写入到response流中 %>
login.jsp 如下:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'MyJsp.jsp' starting page</title> <mce:script language="JavaScript"><!-- function loadimage() { document.getElementById("randImage").src = "fjm/image.jsp?"+Math.random(); } // --></mce:script> </head> <body> <form action ="validate.jsp" method ="post"> <table> <tr> <td>验证码:</td> <td><input name="rand" class="formfieldyzm" id="rand" type="text" maxlength="4" tabindex="3"></td> <td> <img align="center" valign="middle" alt="验证码..." name="randImage" id="randImage" src="/cjfx/fjm/image.jsp" mce_src="cjfx/fjm/image.jsp" width="100" height="20" border="1"/> <a onclick="loadimage()"> <font color="red"><u>换一个</u></font></a> </td> <td><button type ="submit" action="">提交</button></td> </tr> </table> </form> </body> </html>
validate.jsp 如下:
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'MyJsp1.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css"> --> </head> <body> <% String str = ""; String usrRand = request.getParameter("rand"); String sysRand = session.getAttribute("rand").toString(); if (usrRand.equals(sysRand)) str = "success!"; else str = "failure!"; %> 用户输入验证码:<%=request.getParameter("rand")%> 系统生成验证码:<%=sysRand %> <%=str%><br> </body> </html>
相关文章推荐
- java实现自定义数字验证码以及使用方法
- 使用Java实现系统托盘功能的介绍(附源码以及截图)
- 用java实现验证码的生成,以下代码是一个controller,可以直接使用!
- Java学习日记9:登录时验证码的功能以及实现
- 使用java实现数学中的排列组合公式A和C以及阶乘
- java中俩种方法实现一个线程,以及不推荐使用stop()和suspend()方法
- java学习之Map接口以及实现类HashMap,TreeMap的使用
- 使用阿里大于平台发送短信验证码java代码实现
- JAVAWEB开发之Servlet3.0新特性的使用以及注解的详细使用和自定义注解的方法、动态代理的使用、利用动态代理实现细粒度的权限控制以及类加载和泛型反射
- 图片验证码自动识别,使用tess4j进行验证码自动识别(java实现)
- Java多线程学习笔记1——线程的实现方式以及定时器的使用
- 邻接矩阵的dijkstra算法 迭代法以及使用PriorityQueue的java实现
- java实现对属性文件的增删改查以及ResourceBundle使用详解
- 浅谈实现滑动验证码,Java核心代码以及原理分析
- 使用java反射实现对象工厂以及工具类的编写
- java session HttpSessionListener、HttpSessionBindingListener使用区别,实现在线人数统计以及踢出用户
- SHA1算法以及Java代码实现(不使用MessageDigest类)
- Java中栈的实现(1)-使用顺序存储结构(数组)以及实现
- 3.第三单元任务二实训:使用作业提交系统提交Java作业时 ,需要输入Java源代码文件名和自己的邮箱,提交前对Java文件名以及邮箱进行有效检查。编写程序实现对输入的Java源文件名以及邮箱有效性的
- JAVA使用Socket实现多人通讯以及文件传输