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

com.alogic.ac.verifier.Password Maven / Gradle / Ivy

package com.alogic.ac.verifier;

import org.apache.commons.lang3.StringUtils;

import com.alogic.ac.AccessAppKey;
import com.alogic.ac.AccessVerifier;
import com.anysoft.util.BaseException;
import com.anysoft.util.Properties;
import com.anysoft.util.PropertiesConstants;
import com.anysoft.util.code.Coder;
import com.anysoft.util.code.CoderFactory;
import com.logicbus.backend.Context;

/**
 * 密码验证
 * 
 * @author yyduan
 * @since 1.6.10.6
 * 
 * @version 1.6.10.9 [20171124 duanyy] 
* - 请求生存周期ttl可以通过参数ttl进行配置
*/ public class Password extends AccessVerifier.Abstract{ protected Coder des3Coder = null; protected Coder md5Coder = null; protected String timestampId = "x-alogic-now"; protected String pwdId = "x-alogic-pwd"; protected long ttl = 10*1000L; @Override public void configure(Properties p) { super.configure(p); des3Coder = CoderFactory.newCoder("DES3"); md5Coder = CoderFactory.newCoder("MD5"); timestampId = PropertiesConstants.getString(p,"timestampId", timestampId); pwdId = PropertiesConstants.getString(p,"pwdId",pwdId); ttl = PropertiesConstants.getLong(p, "ttl", ttl); } @Override public boolean verify(AccessAppKey key, Context ctx) { checkTimestamp(key,ctx); checkPassword(key,ctx); return true; } protected void checkPassword(AccessAppKey key, Context ctx){ String now = ctx.getRequestHeader(timestampId); String id = key.getId(); String pwd = ctx.getRequestHeader(pwdId); if (StringUtils.isEmpty(pwd)){ pwd = PropertiesConstants.getString(ctx, pwdId, ""); } if (StringUtils.isEmpty(pwd)){ throw new BaseException("clnt.e2000",String.format("Can not find argument %s.",pwdId)); } String pwdDecrypted = des3Coder.decode(pwd, id + "$" + now); String pwdMd5 = md5Coder.encode(pwdDecrypted, id); if (!pwdMd5.equals(key.getKeyContent())){ throw new BaseException("clnt.e2001","The password is not correct."); } } protected void checkTimestamp(AccessAppKey key, Context ctx){ String now = ctx.getRequestHeader(timestampId); long timestamp = getLong(now,0); if (timestamp <= 0){ throw new BaseException("clnt.e2000",String.format("Can not find argument %s.",timestampId)); } if (Math.abs(System.currentTimeMillis() - timestamp) > ttl){ throw new BaseException("clnt.e2006",String.format("Timestamp %d is expired.",timestamp)); } } private long getLong(String now, long i) { try { return Long.parseLong(now); }catch (NumberFormatException ex){ return i; } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy