首先生成导入jar包:
<dependency>
<groupId>cn.apiclub.tool</groupId>
<artifactId>simplecaptcha</artifactId>
<version>1.2.2</version>
</dependency>
下边是生成图片验证码的代码:
在生成验证码后,以验证码值为key存入redis内 (已经写好的存入方法,再次不做赘述了)
captcha.getAnswer() 是图片验证码的值
图片存放时间为1分钟
stringRedisTemplate.opsForValue().set(captcha.getAnswer(), captcha.getAnswer(), 1, TimeUnit.MINUTES);
我使用图片流的方式来讲验证码返回给前端
ImageIO.write(captcha.getImage(), "jpg", out);
以下是全部代码
private static int captchaW = 200; //图片验证码的宽
private static int captchaH = 80; //图片验证码的高
private static int codeCount = 4; //值得位数
private static char[] codeNumber = new char[]{'0','1','2','3','4','5','6','7','8','9'}; //生成验证码的取值范围
public void createCode(HttpServletRequest request, HttpServletResponse response) throws Exception {
//创建验证码模型,指定图片的宽和高
Captcha.Builder captcha = new Captcha.Builder(captchaW, captchaH);
//设置字体的颜色和大小,若list内放置多个颜色或字体,则每次生成随机使用其中一个
List<Font> fonts = new ArrayList<>();
List<Color> colors = new ArrayList<>();
fonts.add(new Font("Arial",Font.BOLD, 60));
colors.add(Color.RED);
WordRenderer wr = new DefaultWordRenderer(colors, fonts);
//将数字放入到图片上
captcha.addText(new DefaultTextProducer(codeCount, codeNumber), wr);
//为验证码值设置边框效果---无
captcha.gimp(new RippleGimpyRenderer());
//图片验证码生成
captcha.build();
Captcha captchas = captcha.build();
//将验证码以<key,value>形式缓存到redis
stringRedisTemplate.opsForValue().set(captchas.getAnswer(), captchas.getAnswer(), 1, TimeUnit.MINUTES);
OutputStream out = response.getOutputStream();
try {
ImageIO.write(captchas.getImage(), "jpg", out);
} catch (Exception e) {
log.debug("", e);
}
out.close();
}
学习链接:http://www.iteye.com/topic/790038
注意:原方法是将生成的图片验证码放入到cookie 中,并将cookie的值返回。
本文为自己学习所整理笔记,仅限参考