java动态生成验证码
2012-09-13 14:39
375 查看
生成验证码代码:
controller调用:
jsp页面调用代码:
xml配置:
//得到验证码
String verifyCode = (String)request.getSession().getAttribute(ConstantUtil.SESSIOIN_ATTRIBUTE_VERIFYCODE);
package com.accor.crm.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class VerifyCodeUtil { private static final int VERIFY_CODE_TYPE_NUMBER = 1; private static final int VERIFY_CODE_TYPE_LETTER_DEFAULT = 2; private static final int VERIFY_CODE_WIDTH_DEFAULT = 80; private static final int VERIFY_CODE_HEIGHT_DEFAULT = 20; public static void create(int type,String sessionVerifyCodeName, HttpServletRequest request, HttpServletResponse response) throws IOException{ create(VERIFY_CODE_WIDTH_DEFAULT,VERIFY_CODE_HEIGHT_DEFAULT,type,sessionVerifyCodeName,request,response); } public static void create(String sessionVerifyCodeName,HttpServletRequest request, HttpServletResponse response) throws IOException{ create(VERIFY_CODE_WIDTH_DEFAULT,VERIFY_CODE_HEIGHT_DEFAULT,VERIFY_CODE_TYPE_LETTER_DEFAULT,sessionVerifyCodeName,request,response); } public static void create(int width, int height,int type,String sessionVerifyCodeName, HttpServletRequest request, HttpServletResponse response) throws IOException{ response.setContentType("image/jpeg"); response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setDateHeader("Expires", 0); HttpSession session=request.getSession(false); BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = image.getGraphics(); Random random = new Random(); Font mFont = new Font("Arial", Font.PLAIN, 18); g.setColor(getRandColor(200,250)); g.fillRect(1, 1, width, height); g.setFont(mFont); g.setColor(new Color(102,102,102)); g.drawRect(0, 0, width-1, height-1); g.setColor(getRandColor(160,200)); for (int i=0;i<20;i++){ int x = random.nextInt(width - 1); int y = random.nextInt(height - 1); int xl = random.nextInt(6) + 1; int yl = random.nextInt(12) + 1; g.drawLine(x,y,x + xl,y + yl); } for (int i=0;i<20;i++){ int x = random.nextInt(width - 1); int y = random.nextInt(height - 1); int xl = random.nextInt(12) + 1; int yl = random.nextInt(6) + 1; g.drawLine(x,y,x - xl,y - yl); } String sRand=""; for (int i=0;i<4;i++){ String randTemp = ""; if(VERIFY_CODE_TYPE_NUMBER==type){ randTemp = String.valueOf(random.nextInt(10)); sRand += randTemp; }else{ randTemp = getRandomChar(); sRand += randTemp; } g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); g.drawString(randTemp,15*i+10,15); } session.setAttribute(sessionVerifyCodeName,sRand); g.dispose(); ServletOutputStream responseOutputStream =response.getOutputStream(); ImageIO.write(image, "JPEG", responseOutputStream); responseOutputStream.flush(); responseOutputStream.close(); } public static 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); } private static String getRandomChar(){ int rand = (int)Math.round(Math.random() * 2); long itmp = 0; char ctmp = '\\'; switch (rand) { case 1: itmp = Math.round(Math.random() * 25 + 65); ctmp = (char)itmp; return String.valueOf(ctmp); case 2: itmp = Math.round(Math.random() * 25 + 97); ctmp = (char)itmp; return String.valueOf(ctmp); default : itmp = Math.round(Math.random() * 9); return String.valueOf(itmp); } } }
controller调用:
public ModelAndView createVerifyCode(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { VerifyCodeUtil.create(ConstantUtil.SESSIOIN_ATTRIBUTE_VERIFYCODE, request, response); return null; }
jsp页面调用代码:
function verifyCodeAgain(){ $("#verifyCodeImgId").attr("src",$("#verifyCodeImgId").attr("src")+"?param=0"); }
<a href="ae/aeLogin.htm#" title="<fmt:message key="login.verifyCode.title.again"/>" onclick="verifyCodeAgain()"> <img id="verifyCodeImgId" src="<c:url value='/createVerifyCode.htm'/>" border="0"/> </a>
xml配置:
<bean id="createVerifyCodeController" class="com.accor.crm.view.controller.ae.CreateVerifyCodeController"> <property name="methodNameResolver"> <ref bean="InternalPathMethodNameResolver" /> </property> </bean>
<prop key="/createVerifyCode.htm">createVerifyCodeController</prop>
//得到验证码
String verifyCode = (String)request.getSession().getAttribute(ConstantUtil.SESSIOIN_ATTRIBUTE_VERIFYCODE);
相关文章推荐
- 【java】注册功能动态验证码的生成和验证(完整图片验证码封装工具类)
- JAVA 生成动态验证码
- java随机动态生成汉字验证码图片的实例代码分享
- java实现动态验证码生成(转)
- java随机生成动态验证码
- java生成动态gif格式与png格式的验证码(代码5)
- Java随机生成动态验证码
- java生成动态gif格式与png格式的验证码(代码4)
- java生成动态gif格式与png格式的验证码(代码3)
- java生成动态验证码
- 转:随机生成动态验证码 http://www.blogjava.net/JAVA-HE/archive/2007/05/29/120582.aspx
- java生成动态gif格式与png格式的验证码(代码2)
- java生成动态gif格式与png格式的验证码(代码1)
- Java的servlet生成动态验证码
- java动态生成验证码图片
- java生成验证码图片,包括动态gif图片格式
- java随机动态生成汉字验证码图片的实例代码分享
- 【Web】Java生成中文GIF动态验证码-集成SpringMVC
- java web 动态生成验证码
- java中如何生成动态验证码并校验