代码画验证码图片(二)

本文介绍了三种不同的验证码实现库:Jcaptcha、Happy-Captcha和Easy-Captcha。Jcaptcha提供了一种基于字典生成图像验证码的方式,Happy-Captcha则支持动画风格的验证码,而Easy-Captcha提供了包括算术和汉字在内的多种类型验证码。这些库方便了开发者在Web应用中实现验证码功能,增强了系统的安全性。
摘要由CSDN通过智能技术生成

  Jcaptcha: 

<dependency>
    <groupId>com.octo.captcha</groupId>
    <artifactId>jcaptcha</artifactId>
    <version>1.0</version>
</dependency>
public class JCaptchaUtil {

    private static final ImageCaptchaService service = imageCaptchaService();
    public static ImageCaptchaService getService(){
        return service;
    }

    private static ImageCaptchaService imageCaptchaService(){

        //背景
        UniColorBackgroundGenerator backgroundGenerator = new UniColorBackgroundGenerator(100,50);
        //字
        RandomRangeColorGenerator textColor = new RandomRangeColorGenerator(new int[]{0,100},new int[]{0,200},new int[]{50,250});
        RandomTextPaster randomTextPaster = new RandomTextPaster(4,5,textColor);
        RandomFontGenerator randomFontGenerator = new RandomFontGenerator(20,30,new Font[]{new Font("TimesRoman",Font.PLAIN,20)});
        //组装图像
        ComposedWordToImage composedWordToImage = new ComposedWordToImage(randomFontGenerator,backgroundGenerator,randomTextPaster);
        ComposeDictionaryWordGenerator cdwg = new ComposeDictionaryWordGenerator(new FileDictionary("toddlist"));
        GimpyFactory gf = new GimpyFactory(cdwg,composedWordToImage);
        GenericCaptchaEngine gce = new GenericCaptchaEngine(new CaptchaFactory[]{gf});
        return new GenericManageableCaptchaService(gce,20,2000,2000);
    }
}
@RestController
@RequestMapping("/jcaptcha")
public class JCaptchaController {

    String attrName = "verifyCode";

    @GetMapping("/generator")
    @TokenCheck(required = false)
    public void  generatorCode(HttpServletRequest request, HttpServletResponse response){

        try {
            String id = request.getSession().getId();
            BufferedImage bufferedImage = JCaptchaUtil.getService().getImageChallengeForID(id);

            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(byteArrayOutputStream);
            jpegEncoder.encode(bufferedImage);

            Object attribute = request.getSession().getAttribute(attrName);
            System.out.println(attribute);

            response.setHeader("Cache-Control","no-store");
            response.setContentType("image/jpeg");
            byte[] bytes = byteArrayOutputStream.toByteArray();
            ServletOutputStream servletOutputStream = response.getOutputStream();
            servletOutputStream.write(bytes);
            servletOutputStream.flush();
            servletOutputStream.close();

        } catch (IOException e) {
            e.printStackTrace();
        }


    }


    @GetMapping("/verify")
    @TokenCheck(required = false)
    public String verify(String verifyCode, HttpServletRequest request){

        Boolean aBoolean = JCaptchaUtil.getService().validateResponseForID(request.getSession().getId(), verifyCode);
        if (aBoolean){
            return "通过";
        }

        return "不通过";
    }
}

happy-captcha: 

<dependency>
    <groupId>com.ramostear</groupId>
    <artifactId>Happy-Captcha</artifactId>
    <version>1.0.1</version>
</dependency>
@RestController
@RequestMapping("/happy-captcha")
public class HappyCaptchaController {


    @GetMapping("/generator")
    @TokenCheck(required = false)
    public void  generatorCode(HttpServletRequest request, HttpServletResponse response) {

        HappyCaptcha.require(request,response)
                .style(CaptchaStyle.ANIM)
                .build().finish();

    }


        @GetMapping("/verify")
        @TokenCheck(required = false)
        public String verity(String verifyCode, HttpServletRequest request){

            Boolean aBoolean = HappyCaptcha.verification(request,verifyCode,true);

            if(aBoolean){
                HappyCaptcha.remove(request);
                return "通过";
            }

            return "不通过";
        }

}

easy-captcha:

<dependency>
    <groupId>com.github.whvcse</groupId>
    <artifactId>easy-captcha</artifactId>
    <version>1.6.2</version>
</dependency>
@RestController
@RequestMapping("/easy-captcha")
public class EasyCaptchaController {


    @GetMapping("/generator")
    @TokenCheck(required = false)
    public void  generatorCode(HttpServletRequest request, HttpServletResponse response) {

        try {
            //基础
            //CaptchaUtil.out(request,response);

            //算数
            //ArithmeticCaptcha arithmeticCaptcha = new ArithmeticCaptcha(200,50);
            //三个数的运算
            //arithmeticCaptcha.setLen(3);
            //CaptchaUtil.out(arithmeticCaptcha,request,response);

            //汉字
            ChineseCaptcha chineseCaptcha = new ChineseCaptcha(150,50);
            CaptchaUtil.out(chineseCaptcha,request,response);

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    @GetMapping("/verify")
    @TokenCheck(required = false)
    public String verity(String verifyCode, HttpServletRequest request){

        Boolean aBoolean = CaptchaUtil.ver(verifyCode,request);

        if(aBoolean){
            HappyCaptcha.remove(request);
            return "通过";
        }

        return "不通过";
    }
Happy Captcha简易验证码是一款易于使用的Java验证码软件包,旨在花最短的时间,最少的代码量,实现Web站点的验证码功能。 Happy Captcha简易验证码提供了图片和动两种展现形式,验证码内容包括中文(收录3500个常用汉字),阿拉伯数字(09),中文数字(零至九),中文大写数字(零至玖),数字与字母混合(09-az-AZ),数字与小写字母混合(09-az),数字与大写字母混合(09-AZ),纯小写字母,纯大写字母,大小写字母混合以及运算表达式(阿拉伯数字运算表达式和中文运算表达式)等12种类型。 Happy Captcha简易验证码完全遵循Apache 2.0开源许可协议,你可以自由使用该软件,如您在使用Happy Captcha时发现软件的任何缺陷,欢迎随时与作者联系。 Happy Captcha简易验证码安装: 如果你的项目使用的是Maven进行依赖管理,你只需向pom.xml文件添加下面的配置即可:     com.ramostear   Happy-Captcha   1.0.1   Gradle用户则可以通过引入如下的配置获取Happy Captcha: implementation 'com.ramostear:Happy-Captcha:1.0.1' Happy Captcha简易验证码使用: HappyCaptcha在设计时力求过程的简洁,在默认情况下,你只需要书写一行代码即可生成漂亮的验证码图片。下面是HappyCaptcha的使用示例: @Controller public class HappyCaptchaController{     @GetMapping("/captcha")     public void happyCaptcha(HttpServletRequest request,HttpServletResponse response){         HappyCaptcha.require(request,response).build().finish();     } } 对于HappyCaptcha而言,只有request和response是必须提供的参数,其余参数都可以使用缺省值。 在默认情况下,HappyCaptcha生成的验证码图片形式展现,内容为09-az-A~Z的字符随机组合,字符长度为5,图片宽度为160,高度为50,字体为微软雅黑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值