springmvc生成注册验证码

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

通过SPRing MVC为系统添加验证码

1:布局登陆页面,用户名,密码,填写验证码的文本框,及验证码的图片及点击换图

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:set var="ctx" value="${pageContext.request.contextPath}"/>

<form id="loginform" method="post">

<table>

<tr>

<td>用户名:</td>

<td><input type="text" name="loginname"/></td>

</tr>

<tr>

<td>密&nbsp;&nbsp;码:</td>

<td><input type="passWord" name="password"/></td>

</tr>

<tr>

<td>验证码:</td>

<td><input type="text" name="code"></td>

<td><img id="codeImg" alt="验证码" src="${ctx}/admin/code" onclick="changeImg()"/></td>

</tr>

</table>

</form>

2:设置换一张图的js

function changeImg() {

var imgSrc= $("#codeImg");

var src= imgSrc.attr("src");

imgSrc.attr("src", chgUrl(src));

}

//加入时间戳,去缓存机制function chgUrl(url) {

var timestamp= (newDate()).valueOf();if((url.indexOf("&") >= 0)) {

url= url + "&timestamp=" +timestamp;

}else{

url= url + "?timestamp=" +timestamp;

}returnurl;

}

3:通过spring请求方式,生成验证码,并且通过流的方式返回至页面

packagecom.gcs.controller;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics;importjava.awt.image.BufferedImage;importjava.io.IOException;importjava.util.Random;importjavax.imageio.ImageIO;importjavax.servlet.ServletOutputStream;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.Httpsession;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;

@Controller

@RequestMapping("/admin")publicclassCodeController {privateintwidth = 90;//定义图片的widthprivateintheight = 20;//定义图片的heightprivateintcodeCount = 4;//定义图片上显示验证码的个数privateintxx = 15;privateintfontHeight = 18;privateintcodeY = 16;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'};

@RequestMapping("/code")publicvoidgetCode(HttpServletRequest req, HttpServletResponse resp)throwsIOException {//定义图像bufferBufferedImage buffImg =newBufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

Graphics gd=buffImg.getGraphics();//创建一个随机数生成器类Random random =newRandom();//将图像填充为白色gd.setColor(Color.WHITE);

gd.fillRect(0, 0, width, height);//创建字体,字体的大小应该根据图片的高度来定。Font font =newFont("Fixedsys", Font.BOLD, fontHeight);//设置字体。gd.setFont(font);//画边框。gd.setColor(Color.BLACK);

gd.drawRect(0, 0, width - 1, height - 1);//随机产生40条干扰线,使图象中的认证码不易被其它程序探测到。gd.setColor(Color.BLACK);for(inti = 0; i < 40; i++) {intx =random.nextInt(width);inty =random.nextInt(height);intxl = random.nextInt(12);intyl = random.nextInt(12);

gd.drawLine(x, y, x+ xl, y +yl);

}//randomCode用于保存随机产生的验证码,以便用户登录后进行验证。StringBuffer randomCode =newStringBuffer();intred = 0, green = 0, blue = 0;//随机产生codeCount数字的验证码。for(inti = 0; i < codeCount; i++) {//得到随机产生的验证码数字。String code = String.valueOf(codeSequence[random.nextInt(codeSequence.length-1)]);//产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。red = random.nextInt(255);

green= random.nextInt(255);

blue= random.nextInt(255);//用随机产生的颜色将验证码绘制到图像中。gd.setColor(newColor(red, green, blue));

gd.drawString(code, (i+ 1) *xx, codeY);//将产生的四个随机数组合在一起。randomCode.append(code);

}//将四位数字的验证码保存到Session中。HttpSession session =req.getSession();

System.out.print(randomCode);

session.setAttribute("code", randomCode.toString());//禁止图像缓存。resp.setHeader("Pragma", "no-cache");

resp.setHeader("Cache-Control", "no-cache");

resp.setDateHeader("Expires", 0);

resp.setContentType("image/jpeg");//将图像输出到Servlet输出流中。ServletOutputStream sos =resp.getOutputStream();

ImageIO.write(buffImg,"jpeg", sos);

sos.close();

}

}

4:在登陆时验证验证码是否正确

String code=request.getParameter("code");if(!(code.equalsIgnoreCase(session.getAttribute("code").toString()))) {//忽略验证码大小写j.setMsg("验证码不正确!");returnj;

}

此为大略简写,若有问题,还请包涵

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航