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
4 years ago
|
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;
|
||
|
}
|
||
|
}
|