图形验证码kaptcha在springboot下使用

众所周知,开源的图形验证码kaptcha已经广泛使用多年了,随着springboot的发展壮大,kaptcha也有了基于springboot的starter模式,这让kaptcha的使用更加的简单,下面就介绍一下如何使用kaptcha starter包来快速实现图形验证码。

引入starter包

kaptcha最早是以jar包的方式发行的,如果要使用就要引入一系列的包,而且要遵循规范引入xml的配置,并且要bean化,虽然步骤不多,但是也比较繁杂一些,自从springboot使用了starter模式,就让这些工作来的更为简单。首先在要使用kaptcha的工程中引入kaptcha的starter包。

<code>        <dependency>            <groupid>com.baomidou/<groupid>            <artifactid>kaptcha-spring-boot-starter/<artifactid>            <version>1.1.0/<version>        /<dependency>/<code>

配置kaptcha

starter模式的配置是和工程主体配置一体化的,也就是放置到application.yml中,相关参数和原先的kaptcha一致,不在多述。

<code>#图形验证码配置kaptcha:  height: 50  width: 200  content:    length: 4    source: 0123456789abcdefghijklmnopqrstuvwxyz    space: 2  font:    color: blue    name: 宋体,楷体,微软雅黑    size: 40  background-color:    from: lightGray    to: white  border:    enabled: true    color: black    thickness: 1/<code>

开始使用

通过@Autowired注解kaptcha就可以直接使用了。

<code>@Autowiredprivate Kaptcha kaptcha;/<code>

kaptcha只提供了三个方法:

1. 生成验证码render();

<code>@GetMapping("/render")    @ApiOperation(value = "获取图形验证码", notes = "图形验证")    public void render() {        kaptcha.render();    }/<code>

2. 输入码验证

<code>@PostMapping("/valid")    @ApiOperation(value = "图形验证码验证", notes = "图形验证")    @ApiImplicitParams({            @ApiImplicitParam(paramType = "query", name = "code", value = "输入验证码", dataType = "String")    })    public ResponseData validDefaultTime(@RequestParam String code) {        ResponseData result=new ResponseData();        try {            kaptcha.validate(code);            result.setStatus(ResponseCode.SUCCESS);        }catch (KaptchaIncorrectException e){            result.setStatus(ResponseCode.GRAPHIC_VERIFICATION_ERROR);        }catch (KaptchaNotFoundException e){            result.setStatus(ResponseCode.GRAPHIC_VERIFICATION_NOTFOUND_ERROR);        }catch (KaptchaRenderException e){            result.setStatus(ResponseCode.GRAPHIC_VERIFICATION_RENDER_ERROR);        }catch (KaptchaTimeoutException e){            result.setStatus(ResponseCode.GRAPHIC_VERIFICATION_EXPIRED_ERROR);        }        return result;    }/<code>

这里强调一下异常处理,validate方法只有验证成功返回true,其他错误都是通过异常暴露的,所以在程序处理的时候要捕获这些异常并进行相关处理。

3. 输入验证码超时设置验证

<code>@PostMapping("/validTime")    @ApiOperation(value = "图形验证码验证,有效期60秒", notes = "图形验证")    @ApiImplicitParams({            @ApiImplicitParam(paramType = "query", name = "code", value = "输入验证码", dataType = "String")    })    public ResponseData validWithTime(@RequestParam String code) {        ResponseData result=new ResponseData();        try {            kaptcha.validate(code,60);            result.setStatus(ResponseCode.SUCCESS);        }catch (KaptchaIncorrectException e){            result.setStatus(ResponseCode.GRAPHIC_VERIFICATION_ERROR);        }catch (KaptchaNotFoundException e){            result.setStatus(ResponseCode.GRAPHIC_VERIFICATION_NOTFOUND_ERROR);        }catch (KaptchaRenderException e){            result.setStatus(ResponseCode.GRAPHIC_VERIFICATION_RENDER_ERROR);        }catch (KaptchaTimeoutException e){            result.setStatus(ResponseCode.GRAPHIC_VERIFICATION_EXPIRED_ERROR);        }        return result;    }/<code>

这个方法和2的方法类似,只是增加了超时设置。

前端使用


<code>
验证码
/<code>


分享到:


相關文章: