JFinal使用技巧-验证码之”加法算数“

如题,看见一个网站他们使用的验证码是加法运算的。头两次没注意到是让运算,直接输入了里面的内容,都说是错误。仔细一看。。。有意思。。。然后想着JF里面应该也是很容易做到这个吧。。。来试试:

新建一个Controller,里面建俩方法Action:

//...

public void captcha() {
    render(new CaptchaRender() {
        int bound = 10;//100
        String myRandomString;

        protected String getRandomString() {
            int a = random.nextInt(bound);
            int b = random.nextInt(bound);
            String ret = null;
            switch (random.nextInt(3)) {
                case 0:
                    //临时存储起来,用于渲染给客户端
                    myRandomString = a + "+" + b + "=?";
                    //返回值被存在系统里,用于验证
                    ret = String.valueOf(a + b);
                    break;
                case 1:
                    myRandomString = a + "-" + b + "=?";
                    ret = String.valueOf(a - b);
                    break;
                default:
                    myRandomString = a + "*" + b + "=?";
                    ret = String.valueOf(a * b);
                    break;
            }
            return ret;
        }
        protected void drawGraphic(String x, BufferedImage image){
            //使用临时存储起来的值,渲染给客户端
            super.drawGraphic(myRandomString, image);
        }
    });
}

public void captchaOk() {
    boolean validate = CaptchaRender.validate(this, get("val"));
    renderText(String.valueOf(validate));
}

然后请求一下,看下效果:

image.png
出来了,再验证一下结果吧:
image.png
哎!有意思!。。。

评论区

zzutligang

2020-06-28 09:12

举一反三,可以!赞一个!

JFinal

2020-06-28 13:35

将减、乘、除也添加进去就更好了

此外,加减可以是两位数的,加大难度

杜福忠

2020-06-28 14:00

@JFinal 没有深度需求,例子代码,简单点好2333 有需求的社友可以在getRandomString()里做下个性扩展哈