Maven配置
<dependency>
? ? ? ? ? ? <groupId>com.octo.captcha</groupId>
? ? ? ? ? ? <artifactId>jcaptcha</artifactId>
? ? ? ? ? ? <version>1.0</version>
? ? ? ? </dependency>
編寫(xiě)JCaptchaUtil工具類(lèi)
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() {
//設(shè)置背景
? ? ? ? UniColorBackgroundGenerator backgroundGenerator =new UniColorBackgroundGenerator(100,50);
//設(shè)置顏色
? ? ? ? RandomRangeColorGenerator textColor =new RandomRangeColorGenerator(new int[]{0,250},new int[]{0,250},new int[]{0,250});
RandomTextPaster randomTextPaster =new RandomTextPaster(4,5,textColor);
//設(shè)置字體
? ? ? ? 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);
}
}
編寫(xiě)JCaptchaController用于請(qǐng)求生成驗(yàn)證碼
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 "驗(yàn)證碼校驗(yàn)驗(yàn)通過(guò)";
}
return "驗(yàn)證碼校驗(yàn)不通過(guò)";
}
}