All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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