java生成并展示验证码

第一步:生成验证码

 

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


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值