⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fetionssoimpl.java

📁 自己实现的AES和DES的加密算法。自己可以随意组成加密数据结构
💻 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 + -