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

com.dounine.clouddisk360.captthread.CaptchaThreadValidator Maven / Gradle / Ivy

package com.dounine.clouddisk360.captthread;

import com.dounine.clouddisk360.parser.deserializer.login.LoginUserToken;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;

public class CaptchaThreadValidator implements Runnable {

	private static final Logger LOGGER = LoggerFactory.getLogger(CaptchaThreadValidator.class);
	public static final int timeoutMin = 10*60;

	private CaptchaThreadValidator() {
	}

	private static CaptchaThreadValidator captchaThreadValidator;

	static {
		captchaThreadValidator = new CaptchaThreadValidator();
		new Thread(captchaThreadValidator).start();
	}

	public static CaptchaThreadValidator getInstance() {
		return captchaThreadValidator;
	}

	private static Map captchaValidators = new HashMap<>(100);

	public static boolean isTimeout(String account) {
		return isTimeout(account, false);
	}

	public static boolean isTimeout(String account, boolean removeTime) {
		synchronized (captchaValidators) {
			if (null == account) {
				LOGGER.error("account 不能为空");
				return false;
			}
			if (StringUtils.isNotBlank(account)) {
				CaptchaValidator captchaValidator = captchaValidators.get(account);
				if (null != captchaValidator) {
					if (captchaValidator.getAddTime().plusMinutes(timeoutMin).isBefore(LocalDateTime.now())) {
						if (removeTime) {
							captchaValidators.remove(account);
						}
					}
				}
				return true;
			} else {
				LOGGER.error("account 不能为空");
			}
			return false;
		}
	}

	public static void validCaptchaValidator(String account, CaptchaValidator captchaValidator) {
		synchronized (captchaValidators) {
			if (null == captchaValidator) {
				LOGGER.error("captchaValidator 不能为空");
				return;
			}
			if (StringUtils.isNotBlank(account)) {
				CaptchaValidator cv = captchaValidators.get(account);
				if(null!=cv){
					cv.setCaptchaValue(captchaValidator.getCaptchaValue());
					captchaValidators.put(account,cv);
				}
			} else {
				LOGGER.error("captchaValidator 属性(account/captchaPath)不能为空");
			}
		}
	}

	public static void addCaptchaValidator(String account, CaptchaValidator captchaValidator) {
		synchronized (captchaValidators) {
			if (null == captchaValidator) {
				LOGGER.error("captchaValidator 不能为空");
				return;
			}
			if (StringUtils.isNotBlank(account)) {
				captchaValidators.put(account, captchaValidator);
			} else {
				LOGGER.error("captchaValidator 属性(account/captchaPath)不能为空");
			}
		}
	}

	public static void removeCaptchaValidator(String account) {
		synchronized (captchaValidators) {
			if (null == account) {
				LOGGER.error("account 不能为空");
				return;
			}
			if (StringUtils.isNotBlank(account)) {
				captchaValidators.remove(account);
			} else {
				LOGGER.error("captchaValidator 属性(account/captchaPath)不能为空");
			}
		}
	}

	public static CaptchaValidator getCaptchaValidator(String account) {
		return getCaptchaValidator(account, false);
	}

	public static CaptchaValidator getCaptchaValidator(LoginUserToken loginUserToken) {
		return getCaptchaValidator(loginUserToken.getAccount(), false);
	}

	public static boolean hasCaptcha(String account){
		synchronized (captchaValidators){
			return null!=captchaValidators.get(account);
		}
	}
	public static CaptchaValidator getCaptchaValidator(String account, boolean removePass) {
		synchronized (captchaValidators) {
			if (null == account) {
				LOGGER.error("account 不能为空");
				return null;
			}
			if (StringUtils.isNotBlank(account)) {
				return captchaValidators.get(account);
			} else {
				LOGGER.error("account 不能为空");
			}
			return null;
		}
	}

	public static Map getCaptchaValidators() {
		return captchaValidators;
	}

	@Override
	public void run() {
		while (true) {
			try {
				Thread.sleep(1000);
				synchronized (captchaValidators) {
					String removeTimeoutKey = null;
					for (String key : captchaValidators.keySet()) {
						CaptchaValidator captchaValidator2 = captchaValidators.get(key);
						if (captchaValidator2.getAddTime().plusMinutes(timeoutMin).isBefore(LocalDateTime.now())) {
							removeTimeoutKey = key;
							break;
						}else if(null!=captchaValidator2.getValidTime()){
							if (captchaValidator2.getValidTime().plusMinutes(timeoutMin).isBefore(LocalDateTime.now())) {
								removeTimeoutKey = key;
								break;
							}
						}
					}
					if (null != removeTimeoutKey) {
						captchaValidators.remove(removeTimeoutKey);
					}
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 更新验证时间及验证信息
	 * @param account
	 */
	public static void updateValidMsgAndTime(String account,String msg,boolean validStatus) {
		synchronized (captchaValidators){
			CaptchaValidator captchaValidator = captchaValidators.get(account);
			if(null!=captchaValidator){
				captchaValidator.setValidMsg(msg);
				captchaValidator.setValidTime(LocalDateTime.now());
				captchaValidator.setSuccess(validStatus);
				captchaValidators.put(account,captchaValidator);
			}else{
				LOGGER.info("用户无需处理验证码");
			}
		}
	}
	public static void emptyCaptchaValue(String account) {
		synchronized (captchaValidators){
			CaptchaValidator captchaValidator = captchaValidators.get(account);
			if(null!=captchaValidator){
				captchaValidator.setCaptchaValue(null);
				captchaValidators.put(account,captchaValidator);
			}
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy