【分享】增强jfinal原生验证码生成及验证,使其支持同一页面显示多个

来由:

在做一个页面会使用多个验证码的场景,发现使用原生的方法仅支持显示一个,于是就进行扩展。

1)新建一个BaseController 它继承 Controller ,需要用到多个验证码的控制层就进行继承它

public class BaseController extends Controller

2)在BaseController中加入如下代码:

public void renderCaptcha(String captchaName) {
    CaptchaRender.setCaptchaName(captchaName);
    render(new CaptchaRender());
}

public boolean validateCaptchaByValue(String captchaName,String userInputString) {
    return CaptchaRender.validate(getCookie(captchaName),userInputString);
}

public boolean validateCaptcha(String captchaName,String paraName) {
    return validateCaptchaByValue(captchaName,getPara(paraName));
}

3)使用方式:

3.1 原生方式

public void qcode(){
    renderCaptcha();
}

3.2 自定义验证码cookie key方式

public void qcode(){
    renderCaptcha(getPara("key"));
}

3.3 原生验证

if(!validateCaptcha("paraName")){
    renderJson(new Result().setFail("验证码效验错误"));
    return;
}

3.3 指定验证码cookie key 以及 参数name

if(!validateCaptcha("cookieKey","paraName")){
    renderJson(new Result().setFail("验证码效验错误"));
    return;
}


注:系统验证码默认 180 秒过期哦~  若想要时间长点 建议自己 去再稍微重写或者覆盖 

com.jfinal.captcha.Captcha.DEFAULT_EXPIRE_TIME = 180


评论区

JFinal

2019-12-07 00:20

为了用起来简单,jfinal 的验证码确实在同一个页面只支持一个

楼主的分享十分简洁,谢谢分享,赞

山东小木

2019-12-08 09:49

目前还没遇到一个界面使用多个验证码的需求 楼主可以举个例子吗 请教一下

Psbye

2019-12-09 09:45

@山东小木 业务需求而已 API接口应用 提供一个单页 进行申请及查询 申请和查询都要验证码支持

简单代码

2019-12-11 19:58

@Psbye 这两个功能使用同一个验证码不行吗?每次提交都刷新验证码就解决了啊。确实想不到同时显示两个验证码的必要性。

Psbye

2019-12-12 00:07

@简单代码 验证码所在的区块不一样,如何共用?要做成共用等于表单要做成类似标签页的登录方式,验证码放在最下面,然后紧随着提交按钮。但是这个并不是我页面布局想要的