📄 .#fetionssomanager.java.1.6
字号:
if (coressikey == null) {
return result;
}
int flag = coressikey.getFlag() & 8;
int keyid = flag & 3;
String key = "";
int credenLevel = 0;
if (flag == 0) {
credenLevel = 1;
} else {
credenLevel = 2;
}
if (keyid == 0) {
key = coressikey.getKey0();
} else if (keyid == 1) {
key = coressikey.getKey1();
} else if (keyid == 2) {
key = coressikey.getKey2();
}
String uri = request.getRequestURI();
String clientip = request.getRemoteAddr();
String corecreden = "";
if (credenLevel == 1) {
EncryptedByte encryptedbyte = new EncryptedByte();
encryptedbyte.setUserType(Constant.USER_TYPE);
encryptedbyte.setUserUri(uri);
encryptedbyte.setDomain(coredomain);
encryptedbyte.setUserIp(clientip);
encryptedbyte.setUserMobileNo(String.valueOf(user.getMp()));
encryptedbyte.setSignInTime(now.getTime());
encryptedbyte.setSignInTimeOut(now.getTime() + Constant.SSO_COOKIE_MAXAGE);
encryptedbyte.setUserSid(""+user.getFid());
encryptedbyte.setUserStatus("" + user.getStatus());
DES des = new DES();
byte[] inBuff = des.data2Byte(encryptedbyte);
byte[] outBuff = des.encryptByDES(inBuff, ByteConvert.getKeyByStr(key));
byte[] bresult = new byte[outBuff.length + 5];
bresult[0] = (byte)coressikey.getFlag().intValue();
byte[] bet = ByteConvert.int2byte(Constant.SSO_COOKIE_MAXAGE);
System.arraycopy(bet, 0, bresult, 1, bet.length);
System.arraycopy(outBuff, 0, bresult, 5, outBuff.length);
corecreden = BASE64.getBASE64(bresult).replaceAll("\r", "").replaceAll("\n", "");
} else if (credenLevel == 2) {
EncryptedByteV2 datav2 = new EncryptedByteV2();
datav2.setUserTypeV2(Constant.USER_TYPE_V2);
datav2.setCreateTime(now.getTime());
datav2.setExpireTime(now.getTime() + Constant.SSO_COOKIE_MAXAGE);
datav2.setSid(user.getFid());
datav2.setMobile(user.getMp());
String logicPoolId = ""+user.getPoolid();
datav2.setLogicalPoolId(Short.valueOf(logicPoolId));
long lip = IpUtil.ipToLongValue(clientip);
datav2.setUserIp(lip);
datav2.setUserStatusV2(user.getStatus());
datav2.setUserTypeV2((byte)0);
byte[] inBuff = AES.encrypt(datav2.getByteV2(), key);
byte[] bresult = new byte[inBuff.length + 5];
bresult[0] = (byte)coressikey.getFlag().intValue();
byte[] bet = ByteConvert.int2byte(Constant.SSO_COOKIE_MAXAGE);
System.arraycopy(bet, 0, bresult, 1, bet.length);
System.arraycopy(inBuff, 0, bresult, 5, inBuff.length);
corecreden = BASE64.getBASE64(bresult).replaceAll("\r", "").replaceAll("\n", "");
}
result = corecreden;
} catch (Exception ex) {
ex.printStackTrace();
}
return result;
}
/**
* 取核心域数据
* @return CredenResult
*/
// private CredenResult getCoreEncryptedData() {
// CredenResult result = new CredenResult();
// result.setType("0");
// try {
// String ssoidkey = Constant.SSO_ID_KEY;
// Cookie cookie = CookieUtils.findCookie(ssoidkey, request);
// if (cookie == null) {
// return result;
// }
// String coredomain = Constant.SSO_SERVER_DOMAIN;
// GcfgSsikeys coressikey = Constant.ssikeyMap.get(coredomain);
// if (coressikey == null) {
// LogUtil.logWrite(CommConstant.LOG_LEVEL_ERROR, "FetionSsoManager",
// "getEncryptedData", "", "GcfgSsikeys data error!", "",
// CommConstant.LOG_SORT_EXCEPTION);
// return result;
// }
//
// /* 解析核心域的Credentail */
// String corecreden = cookie.getValue();
// /* 去除"" */
// if (corecreden.length() >= 2) {
// char beginch = corecreden.charAt(0);
// char endch = corecreden.charAt(corecreden.length() - 1);
// if (beginch == '"' && endch == '"') {
// corecreden = corecreden.substring(1, corecreden.length() - 1);
// }
// }
// byte[] bcorecreden = corecreden.getBytes();
//
// /* Flag = bCoreCredentail[0]
// * bit3:1为第二类凭证,0为第一类凭证(bit "1000" = 8);
// * bit0-bit1 key "11" = 3 */
// int flag = bcorecreden[0] & 8;
// int keyid = bcorecreden[0] & 3;
// String key = "";
// int credenLevel = 0;
// if (flag == 0) {
// credenLevel = 1;
// } else {
// credenLevel = 2;
// }
//
// if (keyid == 0) {
// key = coressikey.getKey0();
// } else if (keyid == 1) {
// key = coressikey.getKey1();
// } else if (keyid == 2) {
// key = coressikey.getKey2();
// }
//
// if (key == null || "".equals(key) || bcorecreden.length <= 5) {
// return result;
// }
//
// byte[] bencrypted = new byte[bcorecreden.length - 5];
// System.arraycopy(bcorecreden, 5, bencrypted, 0, bcorecreden.length - 5);
//
// /* 解析一类凭证,以及二类凭证 */
// if (credenLevel == 1) {
// DES des = new DES();
// byte[] outBuff;
// outBuff = des.decryptByDES(bencrypted, ByteConvert.getKeyByStr(key));
// EncryptedData data = des.byte2date(outBuff);
// if (data != null) {
// result.setType("1");
// result.setData(data);
// }
// } else if (credenLevel == 2) {
// AES aes = new AES();
// byte[] outBuff;
// outBuff = AES.decrypt(bencrypted, key);
// EncryptedDataV2 data = aes.byte2date(outBuff);
// if (data != null) {
// result.setType("2");
// result.setData(data);
// }
// }
// if (!"0".equals(result.getType())) {
// this.updCoreEncryptedData(result, coressikey);
// }
// } catch (Exception ex) {
// ex.printStackTrace();
// }
// return result;
// }
/**
* 取核心域数据
* @return CredenResult
*/
public CredenResult getCoreEncryptedData(String corecreden, String type) {
CredenResult result = new CredenResult();
result.setType("0");
try {
String coredomain = Constant.SSO_SERVER_DOMAIN;
GcfgSsikeys coressikey = Constant.ssikeyMap.get(coredomain);
if(coressikey==null) {
List<GcfgSsikeys> list = SpringHelper.getFetionSsoService().getSsikeysList();
for (int i = 0; i<list.size(); i++) {
coressikey = (GcfgSsikeys)list.get(i);
if(coressikey.getDomain().equals(coredomain)) {
break;
}
}
}
if (coressikey == null) {
return result;
}
byte[] bcorecreden = BASE64.getFromBASE64(corecreden);
/* Flag = bCoreCredentail[0]
* bit3:1为第二类凭证,0为第一类凭证(bit "1000" = 8);
* bit0-bit1 key "11" = 3 */
int flag = bcorecreden[0] & 8;
int keyid = bcorecreden[0] & 3;
String key = "";
int credenLevel = 0;
if (flag == 0) {
credenLevel = 1;
} else {
credenLevel = 2;
}
if (keyid == 0) {
key = coressikey.getKey0();
} else if (keyid == 1) {
key = coressikey.getKey1();
} else if (keyid == 2) {
key = coressikey.getKey2();
}
if (key == null || "".equals(key) || bcorecreden.length <= 5) {
return result;
}
byte[] bencrypted = new byte[bcorecreden.length - 5];
System.arraycopy(bcorecreden, 5, bencrypted, 0, bcorecreden.length - 5);
/* 解析一类凭证,以及二类凭证 */
if (credenLevel == 1) {
DES des = new DES();
byte[] outBuff = des.decryptByDES(bencrypted, ByteConvert.getKeyByStr(key));
EncryptedData data = des.byte2date(outBuff);
if (data != null) {
result.setType("1");
result.setData(data);
}
} else if (credenLevel == 2) {
AES aes = new AES();
byte[] outBuff;
outBuff = AES.decrypt(bencrypted, key);
EncryptedDataV2 data = aes.byte2date(outBuff);
if (data != null) {
result.setType("2");
result.setData(data);
}
}
if (!"0".equals(result.getType())) {
this.updCoreEncryptedData(result, coressikey);
}
} catch (Exception ex) {
ex.printStackTrace();
}
return result;
}
/**
* 取核心域数据 AES解密
* @return CredenResult
*/
public CredenResult getCoreEncryptedDataByAES(String corecreden) {
CredenResult result = new CredenResult();
result.setType("0");
try {
String coredomain = Constant.SSO_SERVER_DOMAIN;
GcfgSsikeys coressikey = Constant.ssikeyMap.get(coredomain);
if(coressikey==null) {
List<GcfgSsikeys> list = SpringHelper.getFetionSsoService().getSsikeysList();
for (int i = 0; i<list.size(); i++) {
coressikey = (GcfgSsikeys)list.get(i);
if(coressikey.getDomain().equals(coredomain)) {
break;
}
}
}
if (coressikey == null) {
return result;
}
byte[] bcorecreden = BASE64.getFromBASE64(corecreden.replaceAll(" ", "+"));
/* Flag = bCoreCredentail[0]
* bit3:1为第二类凭证,0为第一类凭证(bit "1000" = 8);
* bit0-bit1 key "11" = 3 */
int flag = bcorecreden[0] & 8;
int keyid = bcorecreden[0] & 3;
String key = "";
int credenLevel = 0;
if (flag == 0) {
credenLevel = 1;
} else {
credenLevel = 2;
}
if (keyid == 0) {
key = coressikey.getKey0();
} else if (keyid == 1) {
key = coressikey.getKey1();
} else if (keyid == 2) {
key = coressikey.getKey2();
}
if (key == null || "".equals(key) || bcorecreden.length <= 5) {
return result;
}
byte[] bencrypted = new byte[bcorecreden.length - 5];
System.arraycopy(bcorecreden, 5, bencrypted, 0, bcorecreden.length - 5);
credenLevel = 2;
/* 解析一类凭证,以及二类凭证 */
if (credenLevel == 1) {
DES des = new DES();
byte[] outBuff = des.decryptByDES(bencrypted, ByteConvert.getKeyByStr(key));
EncryptedData data = des.byte2date(outBuff);
if (data != null) {
result.setType("1");
result.setData(data);
}
} else if (credenLevel == 2) {
AES aes = new AES();
byte[] outBuff;
outBuff = AES.decrypt(bencrypted, key);
EncryptedDataV2 data = aes.byte2date(outBuff);
if (data != null) {
result.setType("2");
result.setData(data);
}
}
// if (!"0".equals(result.getType())) {
// this.updCoreEncryptedData(result, coressikey);
// }
} catch (Exception ex) {
ex.printStackTrace();
}
return result;
}
/* 取新的过期时间 */
private long getExpireTime() {
long extime = 0;
Calendar c = new GregorianCalendar();
c.setTime (new Date());
c.set(Calendar.MINUTE,c.get(Calendar.MINUTE)+Constant.EXTIME);
extime = c.getTime().getTime();
return extime;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -