importjava.awt.Color;importjava.io.IOException;importjava.util.Random;importjavax.servlet.http.HttpServletResponse;importorg.patchca.color.ColorFactory;importorg.patchca.filter.predefined.CurvesRippleFilterFactory;importorg.patchca.filter.predefined.DiffuseRippleFilterFactory;importorg.patchca.filter.predefined.DoubleRippleFilterFactory;importorg.patchca.filter.predefined.MarbleRippleFilterFactory;importorg.patchca.filter.predefined.WobbleRippleFilterFactory;importorg.patchca.service.ConfigurableCaptchaService;importorg.patchca.utils.encoder.EncoderHelper;importorg.patchca.word.RandomWordFactory;public classCaptchaUtil {private static ConfigurableCaptchaService cs = newConfigurableCaptchaService();private static Random random = newRandom();static{
cs.setColorFactory(newColorFactory() {
@Overridepublic Color getColor(intx) {int[] c = new int[3];int i =random.nextInt(c.length);for (int fi = 0; fi < c.length; fi++) {if (fi ==i) {
c[fi]= random.nextInt(71);
}else{
c[fi]= random.nextInt(256);
}
}return new Color(c[0], c[1], c[2]);
}
});
RandomWordFactory wf= newRandomWordFactory();
wf.setCharacters("23456789abcdefghigkmnpqrstuvwxyzABCDEFGHIGKLMNPQRSTUVWXYZ");
wf.setMaxLength(4);
wf.setMinLength(4);
cs.setWordFactory(wf);
}public static String generate(HttpServletResponse response) throwsIOException{switch (random.nextInt(5)) {case 0:
cs.setFilterFactory(newCurvesRippleFilterFactory(cs.getColorFactory()));break;case 1:
cs.setFilterFactory(newMarbleRippleFilterFactory());break;case 2:
cs.setFilterFactory(newDoubleRippleFilterFactory());break;case 3:
cs.setFilterFactory(newWobbleRippleFilterFactory());break;case 4:
cs.setFilterFactory(newDiffuseRippleFilterFactory());break;
}
setResponseHeaders(response);return EncoderHelper.getChallangeAndWriteImage(cs, "png", response.getOutputStream());
}private static voidsetResponseHeaders(HttpServletResponse response) {
response.setContentType("image/png");
response.setHeader("Cache-Control", "no-cache, no-store");
response.setHeader("Pragma", "no-cache");long time =System.currentTimeMillis();
response.setDateHeader("Last-Modified", time);
response.setDateHeader("Date", time);
response.setDateHeader("Expires", time);
}
}