验证码开源类库Kaptcha

3/3/2017来源:C/C++教程人气:3918

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; } }