验证码开源类库Kaptcha

    xiaoxiao2021-03-26  11

    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; } }
    转载请注明原文地址: https://ju.6miu.com/read-500414.html

    最新回复(0)