通常来说一个B/S项目基本都会用到验证码,用于用户登录或注册,以此提高项目的安全性,而目前仍存在一些网站的应用环境比较特殊,使用人群分部较广,所以需要考虑ie浏浏览器的兼容性,众所周知,ie一代比一代坑,9以下和9以上差异非常大,第三方验证码都很少有兼容ie9以下的。然而由于国情的特殊,仍然有一大部分人在使用ie8甚至更低版本的浏览器。所以我用了patcha,这是一款兼容ie7以上所有版本 (7以下没做测试)的验证码jar包,接入非常方便,效果也不错。
首先,servlet中的代码
package org.captcha.servlet;
import java.awt.Color;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Properties;
import java.util.Random;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.patchca.color.ColorFactory;
import org.patchca.color.SingleColorFactory;
import org.patchca.filter.predefined.CurvesRippleFilterFactory;
import org.patchca.filter.predefined.DiffuseRippleFilterFactory;
import org.patchca.filter.predefined.DoubleRippleFilterFactory;
import org.patchca.filter.predefined.MarbleRippleFilterFactory;
import org.patchca.filter.predefined.WobbleRippleFilterFactory;
import org.patchca.service.ConfigurableCaptchaService;
import org.patchca.utils.encoder.EncoderHelper;
import org.patchca.word.RandomWordFactory;
public class CaptchaServlet extends HttpServlet {
private static final long serialVersionUID = 4968328161261528097L;
private static ConfigurableCaptchaService cs = null;
private static ColorFactory cf = null;
private static RandomWordFactory wf = null;
private static Random r = new Random();
private static CurvesRippleFilterFactory crff = null;
private static MarbleRippleFilterFactory mrff = null;
private static DoubleRippleFilterFactory drff = null;
private static WobbleRippleFilterFactory wrff = null;
private static DiffuseRippleFilterFactory dirff = null;
/**验证码字符串长度,默认4*/
private static Integer randomCodeLength=4;
/**验证码图片宽度,默认120*/
private static Integer randomCodeWidth=120;
/**验证码图片高度,默认50*/
private static Integer randomCodeHight=50;
/**验证码样式
* 1 弯曲状
* 2 摇摆装
* 3 摇晃
* 4 散开
* 5 大理石
* 6 随机(默认)
* */
private static Integer randomCodeType=6;
/**验证码session中Attribute的Name*/
private static String randomCodeSessionAttributeName="PATCHCA";
@Override
public void init() throws ServletException {
super.init();
cs = new ConfigurableCaptchaService();
cf = new SingleColorFactory(new Color(25, 60, 170));
wf = new RandomWordFactory();
crff = new CurvesRippleFilterFactory(cs.getColorFactory());
drff = new DoubleRippleFilterFactory();
wrff = new WobbleRippleFilterFactory();
dirff = new DiffuseRippleFilterFactory();
mrff = new MarbleRippleFilterFactory();
cs.setWordFactory(wf);
cs.setColorFactory(cf);
cs.setWidth(randomCodeWidth);
cs.setHeight(randomCodeHight);
randomCodeLength=Integer.valueOf(null==this.getInitParameter("randomCodeLength")?"4":this.getInitParameter("randomCodeLength"));
randomCodeWidth=Integer.valueOf(null==this.getInitParameter("randomCodeWid