
cn.basics.util.extend.CaptchaUtil Maven / Gradle / Ivy
package cn.basics.util.extend;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.basics.captcha.Captcha;
import cn.basics.captcha.GifCaptcha;
import cn.basics.captcha.SpecCaptcha;
import cn.basics.statics.Statics;
import cn.basics.util.ReturnUtil;
import cn.basics.util.StorageUtil;
import cn.basics.util.StorageUtil.SessionStorageUtil;
/**
* @ClassName: CaptchaUtil
* @Description: TODO(验证码工具)
* @author [email protected] (苟志强)
* @date 2017-9-28 上午11:56:26
*/
public class CaptchaUtil {
protected String id = "";
protected HttpServletRequest request;
protected SessionStorageUtil storageUtil;
/**私有化构造函数*/
private CaptchaUtil(){}
/**初始化验证码-验证工具*/
public static CaptchaValidateUtil init(String id,HttpServletRequest request){
return CaptchaValidateUtil.init(id, request);
}
/**初始化验证码-生成工具*/
public static CaptchaCreateUtil init(HttpServletRequest request){
return CaptchaCreateUtil.init(request);
}
/**验证码生成工具*/
public static class CaptchaValidateUtil extends CaptchaUtil{
/**私有化构造函数*/
private CaptchaValidateUtil(){}
/**初始化验证码-验证工具*/
public static CaptchaValidateUtil init(String id,HttpServletRequest request){
CaptchaValidateUtil captchaValidateUtil = new CaptchaValidateUtil();
captchaValidateUtil.id = id;
captchaValidateUtil.request = request;
captchaValidateUtil.storageUtil = StorageUtil.init(request.getSession());
return captchaValidateUtil;
}
/**验证验证码*/
public ReturnUtil validateCaptcha(String captcha_code){
ReturnUtil returnUtil = ReturnUtil.init();
if(captcha_code == null || "".equals(captcha_code)){
returnUtil.addError("请输入验证码!");
}else{
String captcha_code_validate = storageUtil.getInfoOne(storageUtil.getLoginMemberId(), Statics.CAPTCHA_CODE_KEY+"_"+id, String.class);
Long captcha_code_time = Long.parseLong(storageUtil.getInfoOne(storageUtil.getLoginMemberId(), Statics.CAPTCHA_CODE_KEY+"_"+id+"_time", String.class));
if(captcha_code_validate==null||"".equals(captcha_code_validate)){
returnUtil.addError("验证码已使用,请刷新验证码后重新验证!");
}else if(System.currentTimeMillis()-captcha_code_time > Statics.captcha_time){
returnUtil.addError("验证码已过期,请刷新验证码后重新验证!");
}else{
if(captcha_code != null && captcha_code.equalsIgnoreCase(captcha_code_validate)){
storageUtil.removeInfo(storageUtil.getLoginMemberId(), Statics.CAPTCHA_CODE_KEY+"_"+id);
storageUtil.removeInfo(storageUtil.getLoginMemberId(), Statics.CAPTCHA_CODE_KEY+"_"+id+"_time");
}else{
returnUtil.addError("验证码输入错误,请重新输入验证码!");
}
}
}
return returnUtil;
}
}
/**验证码生成工具*/
public static class CaptchaCreateUtil extends CaptchaUtil{
private static int width = 146;
private static int height = 33;
private static int size = 4;
/**私有化构造函数*/
private CaptchaCreateUtil(){}
/**初始化验证码工具*/
public static CaptchaCreateUtil init(HttpServletRequest request){
CaptchaCreateUtil captchaCreateUtil = new CaptchaCreateUtil();
try {
width = request.getParameter("width")==null?146:Integer.parseInt(request.getParameter("width"));
} catch (Exception e) {
width = 146;
}
try {
height = request.getParameter("height")==null?33:Integer.parseInt(request.getParameter("height"));
} catch (Exception e) {
height = 33;
}
captchaCreateUtil.id = request.getParameter("id")==null?"":request.getParameter("id");
captchaCreateUtil.request = request;
captchaCreateUtil.storageUtil = StorageUtil.init(request.getSession());
return captchaCreateUtil;
}
/**获取GIF格式动画验证码*/
public CaptchaCreateUtil getGifCode(HttpServletResponse response){
try {
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/gif");
/**
* gif格式动画验证码
* 宽,高,位数。
*/
Captcha captcha = new GifCaptcha(width,height,size);
//输出
captcha.out(response.getOutputStream());
storageUtil.storageInfo(storageUtil.getLoginMemberId(), Statics.CAPTCHA_CODE_KEY+"_"+id, captcha.text());
storageUtil.storageInfo(storageUtil.getLoginMemberId(), Statics.CAPTCHA_CODE_KEY+"_"+id+"_time", System.currentTimeMillis());
} catch (Exception e) {
System.out.println("获取验证码异常:"+e.getMessage());
}
return this;
}
/**获取JPG格式动画验证码*/
public CaptchaCreateUtil getJPGCode(HttpServletResponse response){
try {
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpg");
/**
* jgp格式验证码
* 宽,高,位数。
*/
Captcha captcha = new SpecCaptcha(width,height,size);
//输出
captcha.out(response.getOutputStream());
storageUtil.storageInfo(storageUtil.getLoginMemberId(), Statics.CAPTCHA_CODE_KEY+"_"+id, captcha.text());
storageUtil.storageInfo(storageUtil.getLoginMemberId(), Statics.CAPTCHA_CODE_KEY+"_"+id+"_time", System.currentTimeMillis());
} catch (Exception e) {
System.out.println("获取验证码异常:"+e.getMessage());
}
return this;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy