项目地址

https://github.com/smallsnail-wh/wh-validate

实现原理

  1. /validate/imag请求获取验证码图片,并将验证码信息存入session。
  2. 使用filter来验证请求中验证码是否正确。
  3. 提供ImageCodePropertiesConfigurerAdapter和ValidateCodeGenerator 来自定义验证码图片。

使用方法

  • 将项目中com.wh.validate.demo包中的所有代码copy到你的项目,完成相关依赖的导入(可参考此项目本身)。
  • 项目提供默认网址:/validate/image,来获取验证码图片。
  • 实现ImageCodePropertiesConfigurerAdapter接口并注册为bean,配置需要验证的url,可配置多个。
    注意 验证请求中必须以 imageCode=”XXXX”(XXXX为验证字符串),这样的参数形式传入。(若验证请求为post形式,数据格式必须为application/x-www-form-urlencoded)
@Component
public class ImageCodePropertiesConfigurerAdapterTemp implements ImageCodePropertiesConfigurerAdapter {

    @Override
    public void imageCodePropertiesConfigure(ImageCodeDefaultProperties imageCodeDefaultProperties) {
        imageCodeDefaultProperties.setUrl("/login","/logintest");
    }

}
  • 如果验证错误会返回json
    {“error”:403,”message”:”验证码不匹配”}

自定义配置

分两种情况:1.完全使用你自己的图片验证码样式。2,使用此项目图片验证样式,但是改变宽高,以及验证码字符数量和验证码过期时间。

如果完全使用你自己的图片验证码样式,你需要实现ValidateCodeGenerator并注册为bean。在createImageCode中返回ImageCode

@Component
public class ImageCodeGenertorTemp implements ValidateCodeGenerator {

    @Override
    public ImageCode createImageCode(HttpServletRequest req) throws IOException {
        //你生产的验证码图片
        BufferedImage image;
        //验证码图片对应的字符串
        String code;
        //过期时间(单位秒)
        int expireIn;

        ImageCode imageCode = new ImageCode(image,code,expireIn);
        return imageCode;
    }

}

如果使用此项目图片验证样式,但是改变宽高,以及验证码字符数量和验证码过期时间,你可以直接在实现ImageCodePropertiesConfigurerAdapter接口的那个类中,直接配置。

@Component
public class ImageCodePropertiesConfigurerAdapterTemp implements ImageCodePropertiesConfigurerAdapter {

    @Override
    public void imageCodePropertiesConfigure(ImageCodeDefaultProperties imageCodeDefaultProperties) {
        imageCodeDefaultProperties.setSize(5).setHeight(50).setWidth(200).setExpireIn(60).setUrl("/login","/logintest");
    }

}
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐