登录中的图片验证码功能实现
添加kaptcha依赖
<dependency>
<groupId>com.github.axet</groupId>
<artifactId>kaptcha</artifactId>
<version>0.0.9</version>
</dependency>
自定义配置kaptcha的Producer
@Configuration
public class KaptchaConfig {
private static final String KAPTCHA_BORDER = "kaptcha.border";
private static final String KAPTCHA_TEXTPRODUCER_FONT_COLOR = "kaptcha.textproducer.font.color";
private static final String KAPTCHA_TEXTPRODUCER_CHAR_SPACE = "kaptcha.textproducer.char.space";
private static final String KAPTCHA_IMAGE_WIDTH = "kaptcha.image.width";
private static final String KAPTCHA_IMAGE_HEIGHT = "kaptcha.image.height";
private static final String KAPTCHA_TEXTPRODUCER_CHAR_LENGTH = "kaptcha.textproducer.char.length";
private static final Object KAPTCHA_IMAGE_FONT_SIZE = "kaptcha.textproducer.font.size";
@Bean
public DefaultKaptcha producer() {
Properties properties = new Properties();
properties.put(KAPTCHA_BORDER, "no");
properties.put(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "blue");
properties.put(KAPTCHA_TEXTPRODUCER_CHAR_SPACE, 5);
properties.put(KAPTCHA_IMAGE_WIDTH, "100");
properties.put(KAPTCHA_IMAGE_HEIGHT, "35");
properties.put(KAPTCHA_IMAGE_FONT_SIZE, "30");
properties.put(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");
Config config = new Config(properties);
DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
defaultKaptcha.setConfig(config);
return defaultKaptcha;
}
}
使用Producer生成图片验证码
@Controller
public class ValidateCodeController {
@Autowired
private Producer producer;
@Autowired
private ValidateCodeService validateCodeService;
/**
* 创建验证码
*
* @throws Exception
*/
@GetMapping("/validata/code/{deviceId}")
public void createCode(@PathVariable String deviceId, HttpServletResponse response) throws Exception {
Assert.notNull(deviceId, "机器码不能为空");
response.setHeader("Cache-Control", "no-store, no-cache");
response.setContentType("image/jpeg");
//生成文字验证码
String text = producer.createText();
//生成图片验证码
BufferedImage image = producer.createImage(text);
//验证码保存
validateCodeService.saveImageCode(deviceId, text);
try (
ServletOutputStream out = response.getOutputStream()
) {
ImageIO.write(image, "JPEG", out);
}
}
}
还没有评论,来说两句吧...