package com.fr.plugin.sso.service; import com.fanruan.api.log.LogKit; import com.fr.json.JSONObject; import com.fr.plugin.sso.config.SsoConfig; import com.fr.plugin.sso.utils.HttpRequest; import javax.servlet.http.HttpServletRequest; import java.util.Map; /** * 单点登录服务类 * * @author */ public class SsoService { /** * 单点登陆系统appid **/ private String appid; /** * 单点登陆系统appkey **/ private String appkey; /** * 单点登陆系统tokenurl **/ private String tokenurl; /** * 单点登陆系统userinfourl **/ private String userinfourl; /** * 单点登陆系统signouturl **/ private String signouturl; public SsoService() { //初始化加载配置文件中的相关信息 SsoConfig config = SsoConfig.getInstance(); appid = config.getAppId(); appkey = config.getAppKey(); tokenurl = config.getTokenUrl(); userinfourl = config.getUserInfoUrl(); // signouturl = config.getSignOutUrl(); } /** * 获取单点登陆用户的相关信息 * 由于返回SsoUserInfo首字母大写,javabean处理不方便,直接使用map获取。 * 其中map中包括的数值有: * boolean Success; * String Message; * String OpenID; * String AppAccount; * String EmpID; * String Job; * String Token; * String UserName; * String DepartmentID; * String DepartmentName; * String CompanyID; * String CompanyName; * String Title; * String Office; * boolean InService; * 为支持jdk1.4版本,不使用泛型 * * @param token 单点登陆系统token * @param ip 用户IP * @return */ public JSONObject getSsoUserInfo(String token, String ip) { String urlString = userinfourl + "?token=" + token + "&appid=" + appid + "&appkey=" + appkey + "&ip=" + ip; LogKit.error("sso-SsoService-getSsoUserInfo-urlString:{}", urlString); try { //获取返还信息 String json = HttpRequest.sendGet(urlString); LogKit.error("sso-SsoService-getSsoUserInfo-json:{}", json); // 对返回的JSON进行转换 if (json != null && !"".equals(json.trim())) { return new JSONObject(json); } } catch (Exception e) { LogKit.error(e.getMessage(), e); } return null; } /** * 获取ssoToken ,callback是单点登录系统中返回的参数 * 由于返回token首字母大写,使用map获取。map包含的参数有: * String Success; * String Message; * 为支持jdk1.4版本,不使用泛型 * * @param callback * @return */ public JSONObject getSsoToken(String callback, String ip) { String urlString = tokenurl + "?callback=" + callback + "&appid=" + appid + "&appkey=" + appkey + "&ip=" + ip; LogKit.error("sso-SsoService-getSsoToken-urlString:{}", urlString); try { //获取返还信息 String json = HttpRequest.sendGet(urlString); LogKit.error("sso-SsoService-getSsoToken-json:{}", json); // 对返回的JSON进行转换 if (json != null && !"".equals(json.trim())) { return new JSONObject(json); } } catch (Exception e) { LogKit.error(e.getMessage(), e); } // 使用finally块来关闭输出流、输入流 return null; } /** * 注销单点登陆 * * @param token 单点登陆系统token * @param ip 用户IP * @return */ public boolean signOut(String token, String ip) { Map userInfo = null; boolean returnFlag = false; String urlString = signouturl + "?token=" + token + "&appid=" + appid + "&appkey=" + appkey + "&ip=" + ip; try { //获取返还信息 String json = HttpRequest.sendGet(urlString); //判断json是否是true if (json != null && "true".equals(json.trim())) { returnFlag = Boolean.valueOf(json).booleanValue(); } } catch (Exception e) { LogKit.error(e.getMessage(), e); } return returnFlag; } /** * 获取登录用户的IP地址 * * @param request * @return */ public static String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } if (ip.equals("0:0:0:0:0:0:0:1")) { ip = "本地"; } if (ip.split(",").length > 1) { ip = ip.split(",")[0]; } return ip; } }