java实用验证码的实现代码
本文为大家分享了java实用验证码的实现代码,供大家参考,具体内容如下
1、ValidCode
packagevalidImg;
importjava.awt.Color;
importjava.io.IOException;
importjava.util.Random;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.http.HttpSession;
importcom.github.bingoohuang.patchca.color.ColorFactory;
importcom.github.bingoohuang.patchca.custom.ConfigurableCaptchaService;
importcom.github.bingoohuang.patchca.filter.predefined.CurvesRippleFilterFactory;
importcom.github.bingoohuang.patchca.filter.predefined.DiffuseRippleFilterFactory;
importcom.github.bingoohuang.patchca.filter.predefined.DoubleRippleFilterFactory;
importcom.github.bingoohuang.patchca.filter.predefined.MarbleRippleFilterFactory;
importcom.github.bingoohuang.patchca.filter.predefined.WobbleRippleFilterFactory;
importcom.github.bingoohuang.patchca.utils.encoder.EncoderHelper;
importcom.github.bingoohuang.patchca.word.RandomWordFactory;
publicclassValidCodeextendsHttpServlet{
privatestaticConfigurableCaptchaServicecs=newConfigurableCaptchaService();
privatestaticRandomrandom=newRandom();
static{
//cs.setColorFactory(newSingleColorFactory(newColor(25,60,170)));
cs.setColorFactory(newColorFactory(){
@Override
publicColorgetColor(intx){
int[]c=newint[3];
inti=random.nextInt(c.length);
for(intfi=0;fi<c.length;fi++){
if(fi==i){
c[fi]=random.nextInt(71);
}else{
c[fi]=random.nextInt(256);
}
}
returnnewColor(c[0],c[1],c[2]);
}
});
RandomWordFactorywf=newRandomWordFactory();
wf.setCharacters("23456789abcdefghigkmnpqrstuvwxyzABCDEFGHIGKLMNPQRSTUVWXYZ");
wf.setMaxLength(4);
wf.setMinLength(4);
cs.setWordFactory(wf);
}
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
switch(random.nextInt(5)){
case0:
cs.setFilterFactory(newCurvesRippleFilterFactory(cs
.getColorFactory()));
break;
case1:
cs.setFilterFactory(newMarbleRippleFilterFactory());
break;
case2:
cs.setFilterFactory(newDoubleRippleFilterFactory());
break;
case3:
cs.setFilterFactory(newWobbleRippleFilterFactory());
break;
case4:
cs.setFilterFactory(newDiffuseRippleFilterFactory());
break;
}
HttpSessionsession=request.getSession(false);
if(session==null){
session=request.getSession();
}
setResponseHeaders(response);
Stringtoken=EncoderHelper.getChallangeAndWriteImage(cs,"png",
response.getOutputStream());
session.setAttribute("validCode",token);
System.out.println("当前的SessionID="+session.getId()+",验证码=,"+token);
}
protectedvoidsetResponseHeaders(HttpServletResponseresponse){
response.setContentType("image/png");
response.setHeader("Cache-Control","no-cache,no-store");
response.setHeader("Pragma","no-cache");
longtime=System.currentTimeMillis();
response.setDateHeader("Last-Modified",time);
response.setDateHeader("Date",time);
response.setDateHeader("Expires",time);
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
}
}
2.XML代码
<dependency> <groupId>com.github.bingoohuang</groupId> <artifactId>patchca</artifactId> <version>0.0.1</version> </dependency> <servlet> <servlet-name>ValidCode</servlet-name> <servlet-class>validImg.ValidCode</servlet-class> </servlet> <servlet-mapping> <servlet-name>ValidCode</servlet-name> <url-pattern>/validImg.jpg</url-pattern> </servlet-mapping>
以上就是本文的全部内容,希望对大家的学习有所帮助。