1.导入依赖
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>
2.配置config
@Configuration
public class KaptchaConfiguration {
@Bean
public Producer kaptchaProducer() {
Properties props = new Properties();
props.setProperty("kaptcha.border", "no");
props.setProperty("kaptcha.border.color", "105,179,90");
props.setProperty("kaptcha.textproducer.font.color", "blue");
props.setProperty("kaptcha.image.width", "110");
props.setProperty("kaptcha.image.height", "40");
props.setProperty("kaptcha.textproducer.font.size", "30");
props.setProperty("kaptcha.textproducer.char.space", "5");
props.setProperty("kaptcha.noise.color", "gray");
props.setProperty("kaptcha.session.key", "code");
props.setProperty("kaptcha.textproducer.char.length", "4");
Config config = new Config(props);
return config.getProducerImpl();
}
}
3.生成图形验证码及存入redis
@Override
public String getImageCode(String mobile) {
Assert.hasText(mobile, "手机号不能为空");
ByteArrayOutputStream output = new ByteArrayOutputStream();
try {
String code = kaptchaProducer.createText();
BufferedImage imageCode = kaptchaProducer.createImage(code);
ImageIO.write(imageCode, "jpeg", output);
redisService.setString(imageCodeKey(mobile), code);
return new StringBuilder("data:image/jpeg;base64,")
.append(Base64.encodeBase64String(output.toByteArray()))
.toString();
} catch (Exception e) {
throw new BusinessException("图形验证码获取失败:" + e.getMessage());
}
}