JSD-8146 开源任务材料
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

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;
}
}