📄 fetionssoimpl.java
字号:
package com.cmcc.business.impl;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.List;
import java.util.Random;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import com.cmcc.bean.CredenResult;
import com.cmcc.bean.EncryptedDataV2;
import com.cmcc.business.iface.IFetionSsoService;
import com.cmcc.common.util.StringUtil;
import com.cmcc.hibernate.GcfgSsikeys;
import com.cmcc.server.FetionSsoManager;
import com.cmcc.util.Constant;
import com.cmcc.util.SpringHelper;
import com.cmcc.ws.Result;
import com.cmcc.ws.info.IUserInfo;
import com.cmcc.ws.info.UserInfo;
/**
*
* @author Administrator
*
*/
public class FetionSsoImpl extends AbstractGenericServiceImpl implements
IFetionSsoService {
private static Logger log = Logger.getLogger(FetionSsoImpl.class);
public List<GcfgSsikeys> getSsikeysList() {
String hql = " from GcfgSsikeys";
List<GcfgSsikeys> list = this.getGdb_r().query(hql, null);
return list;
}
public boolean checkPwd(UserInfo users, String pwd) {
boolean flag = true;
String md5pwd = StringUtil.getMd5Pwd(String.valueOf(users.getFid()).trim(), pwd.trim());
if (!md5pwd.equals(users.getMd5pwd())) {
flag = false;
}
return flag;
}
public UserInfo getUserInfo(String type, String user) {
/** **********************web service************************** */
boolean errflag = false;
UserInfo ui = null;
Result<UserInfo> user_result;
try {
int random = this.getRandom(Constant.serviceMap.size());
IUserInfo service = (IUserInfo) Constant.serviceMap.get(random);
if ("1".equals(type)) {
user_result = service.getUserInfoByFid(Integer.parseInt(user));
} else {
user_result = service.getUserInfoByMp(Long.parseLong(user));
}
ui = user_result.getData();
service = null;
} catch (Exception e) {
errflag = true;
}
if (errflag) {
for (int i = 0; i < Constant.wsListUserInfo.size(); i++) {
String serverurl = "";
try {
IUserInfo service = (IUserInfo) Constant.serviceMap.get(i);
if ("1".equals(type)) {
user_result = service.getUserInfoByFid(Integer
.parseInt(user));
} else {
user_result = service.getUserInfoByMp(Long
.parseLong(user));
}
ui = user_result.getData();
service = null;
break;
} catch (Exception e2) {
log.info("Exception : Web Service Url = " + serverurl);
continue;
}
}
}
user_result = null;
return ui;
}
public void getResponseDoc(HttpServletResponse response, String corec,
String statuscode, UserInfo users, String userstate,
String[] domain, FetionSsoManager ssomanager) {
String resxml = "";
if (!"200".equals(statuscode)) {
resxml = this.getResXmlErr(statuscode);
} else {
resxml = this.getResXml(users, statuscode, userstate, domain,
corec, ssomanager);
}
users = null;
ssomanager = null;
log.info("PC resxml is : " + resxml);
try {
response.setHeader("Set-Cookie", "ssic=" + corec + "; path=/");
response.setHeader("Cache-Control", "private");
response.setContentType("text/html; charset=utf-8");
response.setStatus(Integer.parseInt(statuscode));
response.setContentLength(resxml.getBytes("utf-8").length);
PrintWriter out = response.getWriter();
out.print(resxml);
out.flush();
out.close();
} catch (Exception e) {
}
}
public String getResXml(UserInfo users, String statuscode,
String userstate, String[] domain, String corec,
FetionSsoManager ssomanager) {
String resxml = "";
resxml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>"
+ "<results status-code=\"" + statuscode
+ "\"><user uri=\"sip:" + users.getFid() + "@fetion.com.cn;p="
+ users.getPoolid() + "\" mobile-no=\"" + users.getMp()
+ "\" user-status=\"" + userstate + "\"><credentials>";
if (domain != null && domain.length > 0 && !"".equals(corec)) {
for (int i = 0; i < domain.length; i++) {
resxml += "<credential domain=\"" + domain[i] + "\" c=\""
+ corec + "\"/>";
}
}
resxml += "</credentials>" + "</user>" + "</results>";
return resxml;
}
public void getResponseDocCmwap(HttpServletResponse response,
String statecode, UserInfo users, String user_state, String corec,
String action) {
String resxml = "";
try {
log.info("statecode is : " + statecode);
if (!"200".equals(statecode)) {
resxml = this.getResXmlErr(statecode);
} else {
resxml = this.getResXmlCmwap(users, statecode, user_state,
corec, action);
}
users = null;
log.info("Cmwap resxml is : " + resxml);
response.setStatus(Integer.parseInt(statecode));
response.setContentType("text/xml; charset=utf-8");
response.setContentLength(resxml.getBytes("utf-8").length);
response.setHeader("Cache-Control", "private");
PrintWriter out = response.getWriter();
out.print(resxml);
out.flush();
out.close();
} catch (Exception e) {
}
}
public String getResXmlCmwap(UserInfo users, String statecode,
String user_state, String corec, String action) {
String resxml = "";
if ("1".equals(action)) {
resxml = corec;
} else {
resxml = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>"
+ "<results status-code=\"" + statecode + "\">"
+ "<user uri=\"sip:" + users.getFid() + "@fetion.com.cn;p="
+ users.getPoolid() + "\" mobile-no=\"" + users.getMp()
+ "\" user-status=\"" + user_state + "\" /><credential>"
+ corec + "</credential></results>";
}
return resxml;
}
public String getResXmlErr(String statuscode) {
String resxml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ "<results status-code=\"" + statuscode + "\"/>";
return resxml;
}
public boolean isExpireSsiKeys(HttpServletResponse response) {
boolean flag = false;
GcfgSsikeys ssikeys = (GcfgSsikeys) Constant.ssikeyMap
.get(Constant.SSO_SERVER_DOMAIN);
long expiretime = ssikeys.getExpiretime().getTime();
long nowtime = new Date().getTime();
if (nowtime > expiretime) {
Constant.ssikeyMap.clear();
IFetionSsoService ifs = SpringHelper.getFetionSsoService();
List<GcfgSsikeys> list = ifs.getSsikeysList();
if (list != null && !list.isEmpty()) {
for (int i = 0; i < list.size(); i++) {
ssikeys = list.get(i);
if (ssikeys.getDomain().equals(Constant.SSO_SERVER_DOMAIN)) {
Constant.ssikeyMap.put(ssikeys.getDomain(), ssikeys);
log.info(ssikeys.getDomain() + "::"
+ ssikeys.getFlag());
break;
}
}
list.clear();
}
expiretime = ssikeys.getExpiretime().getTime();
nowtime = new Date().getTime();
if (nowtime > expiretime) {
flag = true;
response.setStatus(411); // Ssikeys过期
response.setContentType("text/plain");
response.setContentLength(0);
PrintWriter out;
try {
out = response.getWriter();
out.print("");
out.flush();
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
ifs = null;
}
ssikeys = null;
return flag;
}
public String staySsoLogin(HttpServletResponse response, String corec,
FetionSsoManager ssomanager) {
boolean flag = true;
String sid = "";
final int corecredenlength = 5;
long nowtime = new Date().getTime();
if (corec != null && !"".equals(corec)
&& corec.length() > corecredenlength) {
corec = corec.replaceFirst("ssic=", "");
// System.out.println("corec : " + corec);
CredenResult cr = ssomanager.getCoreEncryptedDataByAES(corec);
EncryptedDataV2 data = (EncryptedDataV2) cr.getData();
long extime = data.getExpireTime();
log.info(nowtime);
log.info(extime);
if (nowtime > extime) {
log.info(" StaySsoLogin is Faliure ! New Login!");
this.getResponseDoc(response, corec, "401", null, "", null,
ssomanager);
flag = false;
}
if (flag) {
// 保持登录,重新生成加密串
sid = String.valueOf(data.getSid());
UserInfo users = new UserInfo();
users.setFid(data.getSid());
users.setMp(data.getMobile());
users.setPoolid((int) data.getLogicalPoolId());
users.setStatus(data.getUserStatusV2());
String core = ssomanager
.createCoreCredenByAES(users, "WebUser");
log.info(" StaySsoLogin is Success ! ");
this.getResponseDoc(response, core, "200", users, "101", null,
ssomanager);
}
cr = null;
data = null;
}
return sid;
}
private int getRandom(int size) {
Random rand = new Random();
return Math.abs(rand.nextInt()) % size;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -