JSD-7566 单点登录+用户同步
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.

274 lines
10 KiB

package com.fr.plugin.ztsso.handler;
import com.fr.decision.authority.data.User;
import com.fr.decision.fun.impl.BaseHttpHandler;
import com.fr.decision.webservice.bean.user.UserBean;
import com.fr.json.JSONObject;
import com.fr.plugin.ztsso.config.simple.account.PluginSimpleConfig;
import com.fr.plugin.ztsso.utils.*;
import com.fr.third.springframework.web.bind.annotation.RequestMethod;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
public class AcountHandler extends BaseHttpHandler {
public AcountHandler() {
}
@Override
public RequestMethod getMethod() {
return RequestMethod.GET;
}
@Override
public String getPath() {
return "/account";
}
@Override
public boolean isPublic() {
return true;
}
@Override
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception {
//获取配置参数
PluginSimpleConfig pluginSimpleConfig = PluginSimpleConfig.getInstance();
String cosCode = pluginSimpleConfig.getConsumerCode();
String operaCode = pluginSimpleConfig.getOperationCode();
Map<String,String> header = new HashMap<String,String>();
header.put("consumerCode",cosCode);
header.put("operationCode",operaCode);
String sysCode = pluginSimpleConfig.getSystemCode();
String key = pluginSimpleConfig.getIntegrationKey();
//获取token
String url = pluginSimpleConfig.getTysf();
JSONObject param = new JSONObject();
param.put("method","login");
JSONObject tokenRequest = new JSONObject();
tokenRequest.put("systemCode",sysCode);
tokenRequest.put("integrationKey",key);
tokenRequest.put("force",true);
tokenRequest.put("timestamp",System.currentTimeMillis());
param.put("request",tokenRequest);
String tokenUrl = url+"?method=login&request="+URLEncoder.encode(tokenRequest.toString());
// tokenUrl = URLEncoder.encode(tokenUrl,"utf-8");
String result = HttpUtils.HttpPostJson(tokenUrl,param.toString(),header);
if(Utils.isNullStr(result)){
ResponseUtils.failedResponse(res,"获取token失败");
return;
}
JSONObject tokenResult = new JSONObject(result);
int code = tokenResult.getInt("code");
boolean success = tokenResult.getBoolean("success");
if(!success){
String message = tokenResult.getString("message");
ResponseUtils.failedResponse(res,"获取token失败:"+message);
return;
}
//获取下拉数据
String tokenId = tokenResult.getString("tokenId");
JSONObject pullTaskParam = new JSONObject();
pullTaskParam.put("method","pullTask");
JSONObject pullTaskRequest = new JSONObject();
pullTaskRequest.put("tokenId",tokenId);
pullTaskRequest.put("timestamp",System.currentTimeMillis());
pullTaskParam.put("request",pullTaskRequest);
String pullUrl = url+"?method=pullTask&request="+URLEncoder.encode(pullTaskRequest.toString());
// pullUrl = URLEncoder.encode(pullUrl,"utf-8");
String pullTaskResultStr = HttpUtils.HttpPostJson(pullUrl,pullTaskParam.toString(),header);
if(Utils.isNullStr(pullTaskResultStr)){
ResponseUtils.failedResponse(res,"获取数据失败");
return;
}
JSONObject pullTaskResult = new JSONObject(pullTaskResultStr);
code = pullTaskResult.getInt("code");
success = pullTaskResult.getBoolean("success");
if(!success){
String message = pullTaskResult.getString("message");
ResponseUtils.failedResponse(res,"获取数据失败:"+message);
return;
}
//根据不同类型进行账户或者组织机构的操作
String objectType = pullTaskResult.getString("objectType");
String taskId = pullTaskResult.getString("taskId");
String guid = pullTaskResult.getString("id");
if("TARGET_ACCOUNT".equals(objectType)){
operateAccout(pullTaskResult,res);
}else if("TARGET_ORGANIZATION".equals(objectType)){
operateOrg(pullTaskResult,res);
}
//返回下拉完成状态
JSONObject finishTaskParam = new JSONObject();
finishTaskParam.put("method","pullFinish");
JSONObject finishTaskRequest = new JSONObject();
finishTaskRequest.put("tokenId",tokenId);
finishTaskRequest.put("timestamp",System.currentTimeMillis());
finishTaskRequest.put("taskId",taskId);
finishTaskRequest.put("success",true);
finishTaskRequest.put("guid",guid);
finishTaskParam.put("request",finishTaskRequest);
String finishUrl = url+"?method=pullFinish&request="+URLEncoder.encode(finishTaskRequest.toString());
String finishResultStr = HttpUtils.HttpPostJson(finishUrl,pullTaskParam.toString(),header);
if(Utils.isNullStr(finishResultStr)){
ResponseUtils.failedResponse(res,"下拉完成失败");
return;
}
JSONObject finishResult = new JSONObject(finishResultStr);
success = finishResult.getBoolean("success");
if(!success){
String message = finishResult.getString("message");
ResponseUtils.failedResponse(res,"下拉完成失败:"+message);
return;
}
//注销登录
JSONObject loggoutParam = new JSONObject();
loggoutParam.put("method","logout");
JSONObject logoutRequest = new JSONObject();
logoutRequest.put("tokenId",tokenId);
logoutRequest.put("timestamp",System.currentTimeMillis());
loggoutParam.put("request",logoutRequest);
String logoutUrl = url+"?method=logout&request="+URLEncoder.encode(logoutRequest.toString());
String logoutResultStr = HttpUtils.HttpPostJson(logoutUrl,loggoutParam.toString(),header);
}
private void operateAccout(JSONObject pullTaskData,HttpServletResponse res) {
FRUtils.FRLogInfo("account");
String effectOn = pullTaskData.getString("effectOn");
JSONObject data = pullTaskData.getJSONObject("data");
String username = data.getString("username");
String password = data.getString("password");
String fullname = data.getString("fullname");
boolean isDisabled = data.getBoolean("isDisabled");
String email = data.getString("email");
String mobile = data.getString("mobile");
UserBean userBean = new UserBean();
userBean.setUsername(username);
userBean.setPassword(Utils.replaceNullStr(password,"123"));
userBean.setRealName(fullname);
userBean.setEnable(isDisabled);
userBean.setEmail(email);
userBean.setMobile(mobile);
if("CREATE".equals(effectOn)){
try {
FRUserUtils.addUser(userBean);
} catch (Exception e) {
String message = Utils.replaceNullStr(e.getMessage(),"添加用户失败");
ResponseUtils.failedResponse(res,message);
return;
}
}else if("DISABLED".equals(effectOn)){
try {
String userId = FRUserUtils.getUserByUserName(username).getId();
FRUserUtils.forbidUser(userId,false);
} catch (Exception e) {
String message = Utils.replaceNullStr(e.getMessage(),"禁用用户失败");
ResponseUtils.failedResponse(res,message);
return;
}
}else if("ENABLED".equals(effectOn)){
try {
String userId = FRUserUtils.getUserByUserName(username).getId();
FRUserUtils.forbidUser(userId,true);
} catch (Exception e) {
String message = Utils.replaceNullStr(e.getMessage(),"启用用户失败");
ResponseUtils.failedResponse(res,message);
return;
}
}else if("DELETED".equals(effectOn)){
try {
User user = FRUserUtils.getUserByUserName(username);
FRUserUtils.deleteUser(user);
} catch (Exception e) {
String message = Utils.replaceNullStr(e.getMessage(),"删除用户失败");
ResponseUtils.failedResponse(res,message);
return;
}
}else if("UPDATED".equals(effectOn)){
try {
User user = FRUserUtils.getUserByUserName(username);
UserBean userBean2 = FRUserUtils.getUser(user.getId());
userBean2.setRealName(fullname);
userBean2.setEmail(email);
userBean2.setMobile(mobile);
FRUserUtils.updateUser(userBean2);
} catch (Exception e) {
String message = Utils.replaceNullStr(e.getMessage(),"修改用户失败");
ResponseUtils.failedResponse(res,message);
return;
}
}
}
private void operateOrg(JSONObject pullTaskData,HttpServletResponse res) {
FRUtils.FRLogInfo("account");
String effectOn = pullTaskData.getString("effectOn");
JSONObject data = pullTaskData.getJSONObject("data");
String name = data.getString("name");
String id = data.getString("_organization");
String parentId = data.getString("_parent");
parentId = Utils.replaceNullStr(parentId,"decision-dep-root");
FRUtils.FRLogInfo("effectOn:"+effectOn);
if("CREATED".equals(effectOn)){
try {
FRDepartmentUtils.addDP(id,parentId,name);
} catch (Exception e) {
String message = Utils.replaceNullStr(e.getMessage(),"添加机构失败");
ResponseUtils.failedResponse(res,message);
return;
}
}else if("DELETED".equals(effectOn)){
try {
FRDepartmentUtils.deleteDepartment(id);
} catch (Exception e) {
String message = Utils.replaceNullStr(e.getMessage(),"删除机构失败");
ResponseUtils.failedResponse(res,message);
return;
}
}else if("UPDATED".equals(effectOn)){
try {
FRDepartmentUtils.updateDP(id,name);
} catch (Exception e) {
String message = Utils.replaceNullStr(e.getMessage(),"修改机构失败");
ResponseUtils.failedResponse(res,message);
return;
}
}
}
}