需用ajax到后台请求 @Controllerpublic class RandomPictureController extends ControllerUtil {/* * 随机字符字典 */private static final char[] CHARS = { '2', '3', '4', '5', '6', '7', '8','9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
@Controller public class RandomPictureController extends ControllerUtil { /* * 随机字符字典 */ private static final char[] CHARS = { '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; /* * 随机数 */ private static Random random = new Random(); /* * 获取6位随机数 */ private static String getRandomString() { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < 4; i++) { buffer.append(CHARS[random.nextInt(CHARS.length)]); } return buffer.toString(); } /* * 获取随机数颜色 */ private static Color getRandomColor() { return new Color(random.nextInt(255), random.nextInt(255), random .nextInt(255)); } /* * 返回某颜色的反色 */ private static Color getReverseColor(Color c) { return new Color(255 - c.getRed(), 255 - c.getGreen(), 255 - c .getBlue()); } /** * 生成验证码 * * @return String */ @RequestMapping("/rand_getCode.html") public void getCode(HttpServletRequest request, HttpServletResponse response) { try { int width = 63; int height = 37; Random random = new Random(); //设置response头信息 //禁止缓存 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", 0); //生成缓冲区image类 BufferedImage image = new BufferedImage(width, height, 1); //产生image类的Graphics用于绘制操作 Graphics g = image.getGraphics(); //Graphics类的样式 g.setColor(this.getRandColor(200, 250)); g.setFont(new Font("Times New Roman",0,28)); g.fillRect(0, 0, width, height); //绘制干扰线 for(int i=0;i<40;i++){ g.setColor(this.getRandColor(130, 200)); int x = random.nextInt(width); int y = random.nextInt(height); int x1 = random.nextInt(12); int y1 = random.nextInt(12); g.drawLine(x, y, x + x1, y + y1); } //绘制字符 String strCode = ""; for(int i=0;i<4;i++){ String rand = String.valueOf(random.nextInt(10)); strCode = strCode + rand; g.setColor(new Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110))); g.drawString(rand, 13*i+6, 28); } //将字符保存到session中用于前端的验证 request.getSession().setAttribute("strCode",strCode); g.dispose(); ImageIO.write(image, "JPEG", response.getOutputStream()); response.getOutputStream().flush(); } catch (Exception e) { e.printStackTrace(); } } 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); } } /** * 验证码验证 * @param req * @param resp * @throws Exception */ @RequestMapping("/rand_vaildata.html") public void vailDataCode(HttpServletRequest req,HttpServletResponse resp) throws Exception { Map前台mapStr=UtilJson.toMap(req.getParameter("mapStr")); String code = (String)req.getSession().getAttribute("strCode");//拿到缓存中的验证码 Map mapInfo=new HashMap (); if(code.equals(mapStr.get("code"))){ mapInfo.put("code",SysFinal.SUCCESS); mapInfo.put("info", ""); }else { mapInfo.put("code",SysFinal.FAIL); mapInfo.put("info", "验证码有误"); } this.respBack(UtilJson.mapToJson(mapInfo), resp); }
/** * 刷新验证码 * @param imgCode img对象ID */ function chageCode(){ $('#imgCode').attr('src','rand_getCode.html?abc='+Math.random());//链接后添加Math.random,确保每次产生新的验证码,避免缓存问题。 } /** *当失去焦点时就开始进行验证 * */ $("#vaidataCodeInfo").blur(function(){ var code=$("#vaidataCodeInfo").val(); if(code==""){ $("#verificationInfo").html("请填写验证码"); } var jsonObj={ "code":code } var jsonAjax={ "url":"rand_vaildata.html", "jsonData":{"mapStr":jsonToStr(jsonObj)}, "methodName":"rand_vaildata" } getAjaxData(jsonAjax); }); }); /** * 验证回调 * @param jsonObj * @return */ function rand_vaildata(jsonObj){ var data = strToJson(jsonObj.data); if (data.code=="fail") { $("#verificationInfo").html(data.info); }else{ $("#verificationInfo").html(data.info); } }