图形验证码(Hutool-captcha)

时间:2024-10-20 17:54:51

介绍

验证码功能位于包中,核心接口为ICaptcha,此接口定义了以下方法:

  • createCode 创建验证码,实现类需同时生成随机验证码字符串和验证码图片
  • getCode 获取验证码的文字内容
  • verify 验证验证码是否正确,建议忽略大小写
  • write 将验证码写出到目标流中

其中write方法只有一个OutputStreamICaptcha实现类可以根据这个方法封装写出到文件等方法。

AbstractCaptcha为一个ICaptcha抽象实现类,此类实现了验证码文本生成、非大小写敏感的验证、写出到流和文件等方法,通过继承此抽象类只需实现createImage方法定义图形生成规则即可。

实现类

LineCaptcha 线段干扰的验证码

生成效果大致如下:

贴栗子:

//定义图形验证码的长和宽
LineCaptcha lineCaptcha = (200, 100);

//图形验证码写出,可以写出到文件,也可以写出到流
("d:/");
//输出code
(());
//验证图形验证码的有效性,返回boolean值
("1234");

//重新生成验证码
();
("d:/");
//新的验证码
(());
//验证图形验证码的有效性,返回boolean值
("1234");

CircleCaptcha 圆圈干扰验证码

贴栗子:

//定义图形验证码的长、宽、验证码字符数、干扰元素个数
CircleCaptcha captcha = (200, 100, 4, 20);
//CircleCaptcha captcha = new CircleCaptcha(200, 100, 4, 20);
//图形验证码写出,可以写出到文件,也可以写出到流
("d:/");
//验证图形验证码的有效性,返回boolean值
("1234");

ShearCaptcha 扭曲干扰验证码

贴栗子:

//定义图形验证码的长、宽、验证码字符数、干扰线宽度
ShearCaptcha captcha = (200, 100, 4, 4);
//ShearCaptcha captcha = new ShearCaptcha(200, 100, 4, 4);
//图形验证码写出,可以写出到文件,也可以写出到流
("d:/");
//验证图形验证码的有效性,返回boolean值
("1234");

写出到浏览器(Servlet输出)

ICaptcha captcha = ...;
(());
//Servlet的OutputStream记得自行关闭哦!

实例: 

    /**
     * 生成图像验证码
     * @param response response请求对象
     * @throws IOException
     */
    @ApiOperation(value="生成图像验证码", notes = "")
    @GetMapping(value = +"/register/generateValidateCode")
    public void generateValidateCode(HttpServletResponse response) throws IOException{
        //设置response响应
        ("UTF-8");
        ("Pragma", "No-cache");
        ("Cache-Control", "no-cache");
        ("Expires", 0);
        ("image/jpeg");

        //把图形验证码凭证放入cookie中
        String tokenId = ().toString();
        Cookie cookie = new Cookie("imgCodeToken",tokenId);
        ("/");
        (cookie);

        //定义图形验证码的长和宽
        LineCaptcha lineCaptcha = (126, 30,4,150);

        int time=60;

        //把凭证对应的验证码信息保存到reids(可从redis中获取)
       (CIIPCommonConstant.CIIP_PROTAL,CIIPCommonConstant.VDLIDATE_CODE_IMG_KEY+tokenId, (),time);

        //输出浏览器
        OutputStream out=();
        (out);
        ();
        ();
    }