java生成并展示验证码

来源:互联网 发布:尘埃落定 知乎 编辑:程序博客网 时间:2024/06/06 19:54

第一步:生成验证码

 

/** * 验证码生成程序 * <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" onclick="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);    }}


原创粉丝点击