图形验证码kaptcha在springboot下使用

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

引入starter包

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

        
        
            com.baomidou
            kaptcha-spring-boot-starter
            1.1.0
        

配置kaptcha

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

#图形验证码配置
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

开始使用

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

    @Autowired
    private Kaptcha kaptcha;

kaptcha只提供了三个方法:

  1. 生成验证码render();
    @GetMapping("/render")
    @ApiOperation(value = "获取图形验证码", notes = "图形验证")
    public void render() {
        kaptcha.render();
    }
  1. 输入码验证
    @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;
    }

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

  1. 输入验证码超时设置验证
    @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;
    }

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

前端使用

验证码

你可能感兴趣的:(图形验证码kaptcha在springboot下使用)