美文网首页springbootIT必备技能
图形验证码kaptcha在springboot下使用

图形验证码kaptcha在springboot下使用

作者: 李征兵 | 来源:发表于2019-12-21 10:27 被阅读0次

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

    引入starter包

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

            <!--kaptcha依赖包-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>kaptcha-spring-boot-starter</artifactId>
                <version>1.1.0</version>
            </dependency>
    

    配置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的方法类似,只是增加了超时设置。

    前端使用

    <div>
        <img alt="验证码" onclick="this.src='/graphic/render?d='+new Date()*1" src="/graphic/render"/>
    </div>
    <form action="/graphic/valid" method="post">
        <input type="text" name="code"/>
        <input type="submit" value="提交"></input>
    </form>
    

    相关文章

      网友评论

        本文标题:图形验证码kaptcha在springboot下使用

        本文链接:https://www.haomeiwen.com/subject/vdownctx.html