Maven配置
<dependency>
<groupId>com.octo.captcha</groupId>
<artifactId>jcaptcha</artifactId>
<version>1.0</version>
</dependency>
编写JCaptchaUtil工具类
package com.bruce.common.util;
import com.octo.captcha.CaptchaFactory;
import com.octo.captcha.component.image.backgroundgenerator.UniColorBackgroundGenerator;
import com.octo.captcha.component.image.color.RandomRangeColorGenerator;
import com.octo.captcha.component.image.fontgenerator.RandomFontGenerator;
import com.octo.captcha.component.image.textpaster.RandomTextPaster;
import com.octo.captcha.component.image.wordtoimage.ComposedWordToImage;
import com.octo.captcha.component.word.FileDictionary;
import com.octo.captcha.component.word.wordgenerator.ComposeDictionaryWordGenerator;
import com.octo.captcha.engine.GenericCaptchaEngine;
import com.octo.captcha.image.gimpy.GimpyFactory;
import com.octo.captcha.service.image.ImageCaptchaService;
import com.octo.captcha.service.multitype.GenericManageableCaptchaService;
public class JCaptchaUtil {
private static final ImageCaptchaService service =imageCaptchaService();
public static ImageCaptchaService getService() {
return service;
}
public static ImageCaptchaService imageCaptchaService() {
//设置背景
UniColorBackgroundGenerator backgroundGenerator =new UniColorBackgroundGenerator(100,50);
//设置颜色
RandomRangeColorGenerator textColor =new RandomRangeColorGenerator(new int[]{0,250},new int[]{0,250},new int[]{0,250});
RandomTextPaster randomTextPaster =new RandomTextPaster(4,5,textColor);
//设置字体
RandomFontGenerator randomFontGenerator =new RandomFontGenerator(20,30);
//组装成图像
ComposedWordToImage composedWordToImage =new ComposedWordToImage(randomFontGenerator,backgroundGenerator,randomTextPaster);
ComposeDictionaryWordGenerator cdwg =new ComposeDictionaryWordGenerator(new FileDictionary("toddlist"));
GimpyFactory gf =new GimpyFactory(cdwg,composedWordToImage);
GenericCaptchaEngine genericCaptchaEngine =new GenericCaptchaEngine(new CaptchaFactory[]{gf});
return new GenericManageableCaptchaService(genericCaptchaEngine,20,2000,2000);
}
}
编写JCaptchaController用于请求生成验证码
package com.bruce.portal.web.controller;
import com.bruce.common.util.JCaptchaUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@RestController
@RequestMapping("/jcaptcha")
public class JCaptchaController {
String attrName ="verifyCode";
@GetMapping("/generatorCode")
public void generatorCode(HttpServletRequest request,HttpServletResponse response) {
System.out.println("generatorCode");
try {
BufferedImage bufferedImage =JCaptchaUtil.getService().getImageChallengeForID(request.getSession().getId());
ByteArrayOutputStream byteArrayOutputStream =new ByteArrayOutputStream();
//ImageIO jpegEncoder = JPEGCodec.createJPEGEncoder(byteArrayOutputStream);
String formatName ="jpg";
//FileOutputStream out = new FileOutputStream(dstName);
//JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
//encoder.encode(dstImage);
ImageIO.write(bufferedImage,formatName,byteArrayOutputStream);
response.setHeader("Cache-Control","no-store");
response.setContentType("image/jpeg");
byte[]bytes =byteArrayOutputStream.toByteArray();
ServletOutputStream servletOutputStream = response.getOutputStream();
servletOutputStream.write(bytes);
servletOutputStream.flush();
servletOutputStream.close();
}catch (IOException ioe) {
ioe.printStackTrace();
}
}
@GetMapping("/verify")
public String verify(String verifyCode,HttpServletRequest request) {
boolean flag =JCaptchaUtil.getService().validateResponseForID(request.getSession().getId(), verifyCode);
if (flag) {
return "验证码校验验通过";
}
return "验证码校验不通过";
}
}
网友评论