验证码开源类库Kaptcha

来源:互联网 发布:英雄联盟17173数据库 编辑:程序博客网 时间:2024/06/10 08:24

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

 <!--Kaptcha是用于生成验证码的开源类库-->    <dependency>      <groupId>com.google.code.kaptcha</groupId>      <artifactId>kaptcha</artifactId>      <version>2.3</version>      <classifier>jdk15</classifier>    </dependency>

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

<!--Kaptcha并没有上传到中央仓库,可以从Sonatype Forge仓库获得该构件-->  <repositories>    <repository>      <id>sonatype-forge</id>      <name>Sonatype Forge</name>      <url>http://repository.sonatype.org/content/groups/forge/</url>      <releases>        <enabled>true</enabled>      </releases>      <snapshots>        <enabled>false</enabled>      </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;        }    }
0 0