验证码开源类库Kaptcha

Kaptcha作为开源类库,可以用来生成在注册账户时所需的验证码图片。
在pom中的配置

 
    <dependency>
      <groupId>com.google.code.kaptchagroupId>
      <artifactId>kaptchaartifactId>
      <version>2.3version>
      <classifier>jdk15classifier>
    dependency>

但是Kaptcha并不在中央仓库中,需要到Sonatype Forge仓库中下载,在pom中配置如下:


  <repositories>
    <repository>
      <id>sonatype-forgeid>
      <name>Sonatype Forgename>
      <url>http://repository.sonatype.org/content/groups/forge/url>
      <releases>
        <enabled>trueenabled>
      releases>
      <snapshots>
        <enabled>falseenabled>
      snapshots>
    repository>
  repositories>

整个业务流程是:
0、初始化验证码生成器

//类实现InitializingBean,在初始化对象的时候,调用afterPropertiesSet方法,初始化验证码生成器producer
    //并提供默认配置
    private DefaultKaptcha producer;
    public void afterPropertiesSet(){
        producer=new DefaultKaptcha();
        producer.setConfig(new Config(new Properties()));
    }

1、生成验证码主键 和 验证码值,并构成Map

//产生验证码主键 和 验证码值,放在Map中
    private Map<String,String> captchaMap=new HashMap<String, String>();
   public String generateCaptchaKey(){
        String key=getRandomString();
       //产生验证码值
       String value=producer.createText();
       captchaMap.put(key,value);
       return key;
    }

//产生验证码主键
public String getRandomString(){
        String range="0123456789abcdefghijklmnopqrstuvwxyz";
        Random random=new Random();
        StringBuffer sb=new StringBuffer();
        for(int i=0;i<6;i++){
            sb.append(range.charAt(random.nextInt(range.length())));
        }
        return  sb.toString();
    }

2、生成验证码图片

 //产生验证码图片
    public byte[] generateCaptchaImage(String captchaKey){
        String value=captchaMap.get(captchaKey);
        BufferedImage image=producer.createImage(value);
        ByteArrayOutputStream out=new ByteArrayOutputStream();
        //或者保存到本地
       // OutputStream output=new FileOutputStream(new File(""));
        //output.write()
        try{
            ImageIO.write(image,"jpg",out);
        }catch (Exception e){
            e.printStackTrace();
        }
        return  out.toByteArray();
    }

3、验证结果

 //验证结果
    public boolean validateCaptcha(String captchaKey,String captchaValue){
        String value=captchaMap.get(captchaKey);
        if(value.equals(captchaValue)){
            captchaMap.remove(captchaKey);
            return  true;
        }else{
            return false;
        }
    }

你可能感兴趣的:(其他)