第一步:生成验证码
/** * 验证码生成程序 * <p> * * @param model * @return * @throws IOException */ @Login(action = Action.Skip) @ResponseBody @RequestMapping(value = "/login_code", method = RequestMethod.GET) public String login_code( Model model ) throws IOException { ConfigurableCaptchaService cs = new ConfigurableCaptchaService(); cs.setHeight(40); cs.setColorFactory(new RandomColorFactory()); cs.setFilterFactory(new CurvesRippleFilterFactory(cs.getColorFactory())); cs.setFontFactory(new RandomFontFactory()); MultipleColorBackgroundFactory bbb = new MultipleColorBackgroundFactory(cs); bbb.setNumber(50); cs.setBackgroundFactory(bbb); cs.setWordFactory(new WordFactory() { public String getNextWord() { StringBuilder str = new StringBuilder(); for ( int i = 0 ; i < 4 ; i++ ) { str.append(getSingleNumberChar()); } Cookie cookie = CookieHelper.findCookieByName(inv.getRequest(), COOKIE_NAME); if ( cookie == null ) { String source = "abcdefghijklmnopqrstuvwxyz"; cookie = new Cookie(COOKIE_NAME, doProduce(6, source)); cookie.setMaxAge(1800); String codeKey = "ds_reg_code:" + cookie.getValue(); expireCache.set(codeKey, str.toString(), 180); inv.getResponse().addCookie(cookie); } else { String codeKey = "ds_reg_code:" + cookie.getValue(); expireCache.set(codeKey, str.toString(), 180); } return str.toString(); } private char getSingleNumberChar() { Random random = new Random(); int numberResult = random.nextInt(10); int ret = numberResult + 48; return (char) ret; } }); EncoderHelper.getChallangeAndWriteImage(cs, "png", inv.getResponse().getOutputStream()); return null; } /** * 产生随机数 */ private static String doProduce(int maxLength, String source) { StringBuffer sb = new StringBuffer(100); for (int i = 0; i < maxLength; i++) { Random random = new Random(); final int number = random.nextInt(maxLength); sb.append(source.charAt(number)); } return sb.toString(); }
第二步:页面展示验证码
<div class="row cl "> <label class="form-label mt-10 col-xs-4">验证码:</label> <div class="formControls col-xs-4"> <input class="input-text " name="identityCode" id="identityCode" datatype="n" nullmsg="请输入验证码!" type="text"> <img alt="" id="codeBtn" src="/ds/login_code" οnclick="this.src='/test/login_code?r='+new Date().getTime()" style="cursor: pointer;"> </div> <div class="col-xs-4"></div> </div>
第三步验证输入是否正确
// 检查验证码 if (StringUtils.isEmpty(identityCode)) { payUrlMap.put("err_code_des", "请输入验证码!"); checkFlg = false; } else { Cookie cookie = CookieHelper.findCookieByName(inv.getRequest(), COOKIE_NAME); if ( cookie != null ) { String codeKey = "ds_reg_code:" + cookie.getValue(); String cacheCode = expireCache.get(codeKey); if (!identityCode.equals(cacheCode)) { payUrlMap.put("err_code_des", "验证码输入错误,请重新输入!"); checkFlg = false; } expireCache.remove(codeKey); } }