You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
171 lines
5.1 KiB
171 lines
5.1 KiB
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; |
|
} |
|
} |