update:第三方待办添加用户名后缀并加密,第三方点击可跳转至审批处理页面
This commit is contained in:
parent
15753ba9ab
commit
92fceb9317
|
@ -1,25 +1,24 @@
|
||||||
package shkd.sys.sys.eoss;
|
package shkd.sys.sys.eoss;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
|
||||||
import kd.bos.cache.CacheFactory;
|
import kd.bos.cache.CacheFactory;
|
||||||
import kd.bos.cache.DistributeSessionlessCache;
|
import kd.bos.cache.DistributeSessionlessCache;
|
||||||
|
import kd.bos.exception.ErrorCode;
|
||||||
|
import kd.bos.exception.KDBizException;
|
||||||
|
import kd.bos.exception.KDException;
|
||||||
import kd.bos.logging.Log;
|
import kd.bos.logging.Log;
|
||||||
import kd.bos.logging.LogFactory;
|
import kd.bos.logging.LogFactory;
|
||||||
import kd.bos.login.thirdauth.ThirdSSOAuthHandler;
|
import kd.bos.login.thirdauth.ThirdSSOAuthHandler;
|
||||||
import kd.bos.login.thirdauth.UserAuthResult;
|
import kd.bos.login.thirdauth.UserAuthResult;
|
||||||
import kd.bos.login.thirdauth.UserProperType;
|
import kd.bos.login.thirdauth.UserProperType;
|
||||||
import kd.bos.servicehelper.user.UserServiceHelper;
|
import kd.bos.servicehelper.user.UserServiceHelper;
|
||||||
|
import org.apache.commons.codec.binary.Base64;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import redis.clients.jedis.Jedis;
|
import shkd.sys.sys.utils.RSAUtils;
|
||||||
import redis.clients.jedis.JedisPool;
|
|
||||||
import redis.clients.jedis.JedisPoolConfig;
|
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.*;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.security.PrivateKey;
|
||||||
|
|
||||||
import static kd.bos.login.thirdauth.UserProperType.UserName;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author: Lang
|
* @author: Lang
|
||||||
|
@ -30,20 +29,19 @@ public class SSOPluginLogin implements ThirdSSOAuthHandler {
|
||||||
private final String CLIENT_ID = System.getProperty("clientKey-scict");
|
private final String CLIENT_ID = System.getProperty("clientKey-scict");
|
||||||
private final String CLIENT_SECRET = System.getProperty("clientSecret-scict");
|
private final String CLIENT_SECRET = System.getProperty("clientSecret-scict");
|
||||||
private final String EOSS_IP = System.getProperty("ip-port");
|
private final String EOSS_IP = System.getProperty("ip-port");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 方法实现用户没有登录的时候跳转认证中心的登录地址
|
* 方法实现用户没有登录的时候跳转认证中心的登录地址
|
||||||
* @param httpServletRequest
|
*
|
||||||
* @param httpServletResponse
|
|
||||||
* @param s
|
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void callTrdSSOLogin(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String s) {
|
public void callTrdSSOLogin(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String s) {
|
||||||
//认证中心的登录地址
|
|
||||||
logger.info(String.format("eoss_ip:%s,client_id:%s,client_secret:%s,重定向地址:%s",EOSS_IP,CLIENT_ID,CLIENT_SECRET,s));
|
|
||||||
|
|
||||||
|
//认证中心的登录地址
|
||||||
|
logger.info(String.format("eoss_ip:%s,client_id:%s,client_secret:%s,重定向地址:%s", EOSS_IP, CLIENT_ID, CLIENT_SECRET, s));
|
||||||
try {
|
try {
|
||||||
String ssourl= EOSS_IP+"/service/SGE-project-sctz-master/pc/dist/login.html";
|
String ssourl = EOSS_IP + "/service/SGE-project-sctz-master/pc/dist/login.html";
|
||||||
if (httpServletRequest.getRequestURI().contains("/auth/logout.do")){
|
if (httpServletRequest.getRequestURI().contains("/auth/logout.do")) {
|
||||||
String userName = UserServiceHelper.getCurrentUser("name").getString("name");
|
String userName = UserServiceHelper.getCurrentUser("name").getString("name");
|
||||||
DistributeSessionlessCache cache = CacheFactory.getCommonCacheFactory().getDistributeSessionlessCache("customRegion");
|
DistributeSessionlessCache cache = CacheFactory.getCommonCacheFactory().getDistributeSessionlessCache("customRegion");
|
||||||
String userKey = "user_sessionId_" + userName; // 构造一个唯一的键
|
String userKey = "user_sessionId_" + userName; // 构造一个唯一的键
|
||||||
|
@ -51,13 +49,13 @@ public class SSOPluginLogin implements ThirdSSOAuthHandler {
|
||||||
if (sessionId != null) {
|
if (sessionId != null) {
|
||||||
AuthService.logout(EOSS_IP, sessionId);
|
AuthService.logout(EOSS_IP, sessionId);
|
||||||
}
|
}
|
||||||
}else{
|
} else {
|
||||||
/**
|
/*
|
||||||
*重定向的统一认证的地址 获取授权码
|
*重定向的统一认证的地址 获取授权码
|
||||||
*/
|
*/
|
||||||
ssourl=String.format("%s/sso2/authCenter/authorize?client_id=%s&response_type=code&authType=0&redirect_uri=%s",
|
ssourl = String.format("%s/sso2/authCenter/authorize?client_id=%s&response_type=code&authType=0&redirect_uri=%s",
|
||||||
EOSS_IP,CLIENT_ID,s);
|
EOSS_IP, CLIENT_ID, s);
|
||||||
logger.info(String.format("重定向地址→sendRedirect:%s",ssourl));
|
logger.info(String.format("重定向地址→sendRedirect:%s", ssourl));
|
||||||
}
|
}
|
||||||
httpServletResponse.sendRedirect(ssourl);
|
httpServletResponse.sendRedirect(ssourl);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
@ -67,24 +65,27 @@ public class SSOPluginLogin implements ThirdSSOAuthHandler {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 实现苍穹调用认证系统的接口解析认证凭据返回用户信息,按数据格式返回认证结果。
|
* 实现苍穹调用认证系统的接口解析认证凭据返回用户信息,按数据格式返回认证结果。
|
||||||
* @param httpServletRequest
|
*
|
||||||
* @param httpServletResponse
|
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public UserAuthResult getTrdSSOAuth(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
|
public UserAuthResult getTrdSSOAuth(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
|
||||||
logger.info(String.format("getTrdSSOAuth→httpServletRequest:%s",httpServletRequest));
|
logger.info(String.format("getTrdSSOAuth→httpServletRequest:%s", httpServletRequest));
|
||||||
//返回的认证结果
|
//返回的认证结果
|
||||||
UserAuthResult result=new UserAuthResult();
|
UserAuthResult result = new UserAuthResult();
|
||||||
//获取返回的授权码
|
//获取返回的授权码
|
||||||
String code = httpServletRequest.getParameter("code");
|
String code = httpServletRequest.getParameter("code");
|
||||||
//获取返回的 sessionId
|
//获取返回的 sessionId
|
||||||
String sessionId = httpServletRequest.getParameter("sessionId");
|
String sessionId = httpServletRequest.getParameter("sessionId");
|
||||||
logger.info(String.format("getTrdSSOAuth→授权码code:%s",code));
|
String userName = httpServletRequest.getParameter("userName");
|
||||||
if (StringUtils.isEmpty(code)){
|
|
||||||
|
// RSAUtils.
|
||||||
|
logger.info(String.format("getTrdSSOAuth→授权码code:%s", code));
|
||||||
|
result.setUserType(UserProperType.UserName);
|
||||||
|
if (StringUtils.isEmpty(code) && StringUtils.isEmpty(userName)) {
|
||||||
logger.error("getTrdSSOAuth→授权码code为空");
|
logger.error("getTrdSSOAuth→授权码code为空");
|
||||||
result.setSucess(false);
|
result.setSucess(false);
|
||||||
}else {
|
return result;
|
||||||
|
} else if (StringUtils.isNotEmpty(code)){
|
||||||
try {
|
try {
|
||||||
//TODO:调用accessToken方法
|
//TODO:调用accessToken方法
|
||||||
String access_token = AuthService.accessToken(code, EOSS_IP, CLIENT_ID, CLIENT_SECRET);
|
String access_token = AuthService.accessToken(code, EOSS_IP, CLIENT_ID, CLIENT_SECRET);
|
||||||
|
@ -100,14 +101,23 @@ public class SSOPluginLogin implements ThirdSSOAuthHandler {
|
||||||
result.setUser(user);
|
result.setUser(user);
|
||||||
result.setSucess(true);
|
result.setSucess(true);
|
||||||
logger.info("SSO用户登录成功,进入苍穹系统");
|
logger.info("SSO用户登录成功,进入苍穹系统");
|
||||||
|
|
||||||
String userKey = "user_sessionId_" + user; // 构造一个唯一的键
|
String userKey = "user_sessionId_" + user; // 构造一个唯一的键
|
||||||
DistributeSessionlessCache cache = CacheFactory.getCommonCacheFactory().getDistributeSessionlessCache("customRegion");
|
DistributeSessionlessCache cache = CacheFactory.getCommonCacheFactory().getDistributeSessionlessCache("customRegion");
|
||||||
cache.put(userKey,sessionId);//将自定义参数加入缓存
|
cache.put(userKey, sessionId);//将自定义参数加入缓存
|
||||||
|
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
throw new KDBizException("获取用户信息接口异常,SSO用户登录失败!"+e);
|
||||||
|
}
|
||||||
|
}else if (StringUtils.isNotEmpty(userName)){
|
||||||
|
try{
|
||||||
|
PrivateKey privateKey1 = RSAUtils.getPrivateKey(Base64.decodeBase64(RSAUtils.privateKey));
|
||||||
|
String sourceData = new String(RSAUtils.decryptByKey(privateKey1, Base64.decodeBase64(userName.getBytes())));
|
||||||
|
result.setUser(sourceData);
|
||||||
|
result.setSucess(true);
|
||||||
|
logger.info("SSO用户登录成功,进入苍穹系统");
|
||||||
|
}catch (Exception e){
|
||||||
|
ErrorCode errorCode = new ErrorCode("error_code", "私钥解密出现异常,请联系运维人员排查!");
|
||||||
|
throw new KDException(errorCode, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -7,6 +7,7 @@ import kd.bos.context.RequestContext;
|
||||||
import kd.bos.dataentity.entity.DynamicObject;
|
import kd.bos.dataentity.entity.DynamicObject;
|
||||||
import kd.bos.db.DB;
|
import kd.bos.db.DB;
|
||||||
import kd.bos.db.DBRoute;
|
import kd.bos.db.DBRoute;
|
||||||
|
import kd.bos.exception.ErrorCode;
|
||||||
import kd.bos.exception.KDException;
|
import kd.bos.exception.KDException;
|
||||||
import kd.bos.logging.Log;
|
import kd.bos.logging.Log;
|
||||||
import kd.bos.logging.LogFactory;
|
import kd.bos.logging.LogFactory;
|
||||||
|
@ -15,11 +16,12 @@ import kd.bos.orm.query.QFilter;
|
||||||
import kd.bos.schedule.executor.AbstractTask;
|
import kd.bos.schedule.executor.AbstractTask;
|
||||||
import kd.bos.servicehelper.QueryServiceHelper;
|
import kd.bos.servicehelper.QueryServiceHelper;
|
||||||
import kd.bos.util.StringUtils;
|
import kd.bos.util.StringUtils;
|
||||||
|
import org.apache.commons.codec.binary.Base64;
|
||||||
import shkd.sys.sys.midservice.handler.CreateToDoHandler;
|
import shkd.sys.sys.midservice.handler.CreateToDoHandler;
|
||||||
import shkd.sys.sys.midservice.handler.DealToDoHandler;
|
import shkd.sys.sys.midservice.handler.DealToDoHandler;
|
||||||
import shkd.sys.sys.midservice.handler.deleteToDoHandler;
|
import shkd.sys.sys.midservice.handler.deleteToDoHandler;
|
||||||
import shkd.sys.sys.midservice.model.BacklogMessage;
|
|
||||||
import shkd.sys.sys.midservice.utils.GetUrlUtils;
|
import shkd.sys.sys.midservice.utils.GetUrlUtils;
|
||||||
|
import shkd.sys.sys.utils.RSAUtils;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
@ -55,7 +57,7 @@ public class ToDoResendTack extends AbstractTask {
|
||||||
logger.info("组装待办、已办重发的数据");
|
logger.info("组装待办、已办重发的数据");
|
||||||
Date beginTimeDate = startTimeDate;
|
Date beginTimeDate = startTimeDate;
|
||||||
// 待办
|
// 待办
|
||||||
boolean hasNext = true;
|
// boolean hasNext = true;
|
||||||
logger.info("开始抽取待办,参数 beginTimeDate:" + beginTimeDate + "endTimeDate:" + endTimeDate);
|
logger.info("开始抽取待办,参数 beginTimeDate:" + beginTimeDate + "endTimeDate:" + endTimeDate);
|
||||||
extractToDoList(beginTimeDate, endTimeDate, "0");
|
extractToDoList(beginTimeDate, endTimeDate, "0");
|
||||||
extractToDoList(beginTimeDate, endTimeDate, "2");
|
extractToDoList(beginTimeDate, endTimeDate, "2");
|
||||||
|
@ -67,13 +69,12 @@ public class ToDoResendTack extends AbstractTask {
|
||||||
* @param startTime 开始时间
|
* @param startTime 开始时间
|
||||||
* @param endTime 结束时间
|
* @param endTime 结束时间
|
||||||
* @param t_status 待办状态
|
* @param t_status 待办状态
|
||||||
* @return
|
|
||||||
*/
|
*/
|
||||||
private void extractToDoList(Date startTime, Date endTime, String t_status) {
|
private void extractToDoList(Date startTime, Date endTime, String t_status) {
|
||||||
String accountId = System.getProperty("backlog-accountid");
|
String accountId = System.getProperty("backlog-accountid");
|
||||||
logger.info("拼接sql,此次拼接的待办类型为:" + t_status + "(1:待办、2已办、5撤销),使用参数startTime:" + startTime + "endTime:"
|
logger.info("拼接sql,此次拼接的待办类型为:" + t_status + "(1:待办、2已办、5撤销),使用参数startTime:" + startTime + "endTime:"
|
||||||
+ endTime);
|
+ endTime);
|
||||||
StringBuffer cwbSql1 = new StringBuffer();
|
StringBuilder cwbSql1 = new StringBuilder();
|
||||||
cwbSql1.append("SELECT ");
|
cwbSql1.append("SELECT ");
|
||||||
cwbSql1.append("b.FID,");
|
cwbSql1.append("b.FID,");
|
||||||
cwbSql1.append("b.FPROCDEFID,");
|
cwbSql1.append("b.FPROCDEFID,");
|
||||||
|
@ -172,8 +173,15 @@ public class ToDoResendTack extends AbstractTask {
|
||||||
//接收人手机号
|
//接收人手机号
|
||||||
DynamicObject dynamicObject = QueryServiceHelper.queryOne("bos_user", "number,name," +
|
DynamicObject dynamicObject = QueryServiceHelper.queryOne("bos_user", "number,name," +
|
||||||
"phone,username", new QFilter[]{new QFilter("id", "=", next.getString("freceiveuserid"))});
|
"phone,username", new QFilter[]{new QFilter("id", "=", next.getString("freceiveuserid"))});
|
||||||
String username = dynamicObject.getString("username");
|
String userName;
|
||||||
String number = dynamicObject.getString("number");
|
try {
|
||||||
|
userName = new String(org.apache.commons.codec.binary.Base64.encodeBase64(RSAUtils.encryptByKey(
|
||||||
|
RSAUtils.getPublicKey(Base64.decodeBase64(RSAUtils.publicKey)),
|
||||||
|
dynamicObject.getString("username").getBytes())));
|
||||||
|
}catch (Exception e){
|
||||||
|
ErrorCode errorCode = new ErrorCode("error_code", "公钥加密出现异常,请联系运维人员排查!");
|
||||||
|
throw new KDException(errorCode, e);
|
||||||
|
}// String number = dynamicObject.getString("number");
|
||||||
switch (t_status) {
|
switch (t_status) {
|
||||||
case "0":
|
case "0":
|
||||||
//标题
|
//标题
|
||||||
|
@ -186,42 +194,42 @@ public class ToDoResendTack extends AbstractTask {
|
||||||
next.getString("factivityId"),
|
next.getString("factivityId"),
|
||||||
next.getString("fbusinesskey"),
|
next.getString("fbusinesskey"),
|
||||||
next.getString("fid"));
|
next.getString("fid"));
|
||||||
StringBuffer form = new StringBuffer();
|
StringBuilder form = new StringBuilder();
|
||||||
form.append("{");
|
form.append("{");
|
||||||
form.append("\"title\":");
|
form.append("\"title\":");
|
||||||
form.append("\""+title+"\",");
|
form.append("\"").append(title).append("\",");
|
||||||
form.append("\"bName\":");
|
form.append("\"bName\":");
|
||||||
form.append("\""+next.getString("fentityname")+"\",");
|
form.append("\"").append(next.getString("fentityname")).append("\",");
|
||||||
form.append("\"bussinessCode\":");
|
form.append("\"bussinessCode\":");
|
||||||
form.append("\""+next.getString("fbillno")+"\",");
|
form.append("\"").append(next.getString("fbillno")).append("\",");
|
||||||
form.append("\"urGency\":");
|
form.append("\"urGency\":");
|
||||||
form.append("\"0\",");
|
form.append("\"0\",");
|
||||||
form.append("\"currentStepName\":");
|
form.append("\"currentStepName\":");
|
||||||
form.append("\""+next.getString("FNAME")+"\",");
|
form.append("\"").append(next.getString("FNAME")).append("\",");
|
||||||
form.append("\"sendUserName\":");
|
form.append("\"sendUserName\":");
|
||||||
form.append("\""+next.getString("fstartname")+"\",");
|
form.append("\"").append(next.getString("fstartname")).append("\",");
|
||||||
form.append("\"receiveUsersysName\":");
|
form.append("\"receiveUsersysName\":");
|
||||||
form.append("\""+username+"\",");
|
form.append("\"").append(userName).append("\",");
|
||||||
form.append("\"receiveUserId\":");
|
form.append("\"receiveUserId\":");
|
||||||
form.append("\""+username+"\",");
|
form.append("\"").append(userName).append("\",");
|
||||||
form.append("\"handleUrl\":");
|
form.append("\"handleUrl\":");
|
||||||
form.append("\""+pcUrl+"&number="+number+"\",");
|
form.append("\"").append(pcUrl).append("&userName=").append(userName).append("\",");
|
||||||
form.append("\"appHandleUrl\":");
|
form.append("\"appHandleUrl\":");
|
||||||
form.append("\""+pcUrl+"&number="+number+"\",");
|
form.append("\"").append(pcUrl).append("&userName=").append(userName).append("\",");
|
||||||
form.append("\"appName\":");
|
form.append("\"appName\":");
|
||||||
form.append("\""+next.getString("fentityname")+"\",");
|
form.append("\"").append(next.getString("fentityname")).append("\",");
|
||||||
form.append("\"pendingId\":");
|
form.append("\"pendingId\":");
|
||||||
form.append("\""+next.getLong("fid")+"\",");
|
form.append("\"").append(next.getLong("fid")).append("\",");
|
||||||
form.append("\"pendingAttr\":");
|
form.append("\"pendingAttr\":");
|
||||||
form.append("\"0\"");
|
form.append("\"0\"");
|
||||||
form.append("}");
|
form.append("}");
|
||||||
CreateToDoHandler.get_CreateToDoHandler().sendCreateToDo(form.toString(),title,next.getLong("fid").toString(),username,next.getString("fbillno"));
|
CreateToDoHandler.get_CreateToDoHandler().sendCreateToDo(form.toString(),title,next.getLong("fid").toString(),userName,next.getString("fbillno"));
|
||||||
break;
|
break;
|
||||||
case "2":
|
case "2":
|
||||||
DealToDoHandler.get_DealToDoHandler().sendDealToDo(next.getLong("fid"),username,next.getString("fbillno"));
|
DealToDoHandler.get_DealToDoHandler().sendDealToDo(next.getLong("fid"),userName,next.getString("fbillno"));
|
||||||
break;
|
break;
|
||||||
case "5":
|
case "5":
|
||||||
deleteToDoHandler.get_deleteToDoHandler().sendDeleteToDo(next.getLong("fid"),username,next.getString("fbillno"));
|
deleteToDoHandler.get_deleteToDoHandler().sendDeleteToDo(next.getLong("fid"),userName,next.getString("fbillno"));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -2,6 +2,8 @@ package shkd.sys.sys.midservice.servicehandler;
|
||||||
|
|
||||||
import kd.bos.dataentity.entity.DynamicObject;
|
import kd.bos.dataentity.entity.DynamicObject;
|
||||||
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
import kd.bos.dataentity.entity.DynamicObjectCollection;
|
||||||
|
import kd.bos.exception.ErrorCode;
|
||||||
|
import kd.bos.exception.KDException;
|
||||||
import kd.bos.logging.Log;
|
import kd.bos.logging.Log;
|
||||||
import kd.bos.logging.LogFactory;
|
import kd.bos.logging.LogFactory;
|
||||||
import kd.bos.orm.query.QFilter;
|
import kd.bos.orm.query.QFilter;
|
||||||
|
@ -9,9 +11,11 @@ import kd.bos.servicehelper.QueryServiceHelper;
|
||||||
import kd.bos.workflow.engine.msg.ctx.MessageContext;
|
import kd.bos.workflow.engine.msg.ctx.MessageContext;
|
||||||
import kd.bos.workflow.engine.msg.handler.AbstractServiceHandler;
|
import kd.bos.workflow.engine.msg.handler.AbstractServiceHandler;
|
||||||
import kd.bos.workflow.engine.msg.info.ToDoInfo;
|
import kd.bos.workflow.engine.msg.info.ToDoInfo;
|
||||||
|
import org.apache.commons.codec.binary.Base64;
|
||||||
import shkd.sys.sys.midservice.handler.CreateToDoHandler;
|
import shkd.sys.sys.midservice.handler.CreateToDoHandler;
|
||||||
import shkd.sys.sys.midservice.handler.DealToDoHandler;
|
import shkd.sys.sys.midservice.handler.DealToDoHandler;
|
||||||
import shkd.sys.sys.midservice.handler.deleteToDoHandler;
|
import shkd.sys.sys.midservice.handler.deleteToDoHandler;
|
||||||
|
import shkd.sys.sys.utils.RSAUtils;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -34,38 +38,47 @@ public class BacklogServiceHandle extends AbstractServiceHandler {
|
||||||
//几个待办
|
//几个待办
|
||||||
List<Long> userIds = todoInfo.getUserIds();
|
List<Long> userIds = todoInfo.getUserIds();
|
||||||
DynamicObjectCollection query = QueryServiceHelper.query("bos_user", "id,name,number" +
|
DynamicObjectCollection query = QueryServiceHelper.query("bos_user", "id,name,number" +
|
||||||
".0,phone,username", new QFilter[]{new QFilter("id", "in", userIds)});
|
",phone,username", new QFilter[]{new QFilter("id", "in", userIds)});
|
||||||
DynamicObject dynamicObject = QueryServiceHelper.queryOne("wf_hitaskinst", "billno,startname,id,name",
|
DynamicObject dynamicObject = QueryServiceHelper.queryOne("wf_hitaskinst", "billno,startname,id,name",
|
||||||
new QFilter[]{new QFilter("id", "=", todoInfo.getTaskId())});
|
new QFilter[]{new QFilter("id", "=", todoInfo.getTaskId())});
|
||||||
logger.info("####待办taskid:"+todoInfo.getTaskId());
|
logger.info("####待办taskid:"+todoInfo.getTaskId());
|
||||||
for (DynamicObject query_one : query) {
|
for (DynamicObject query_one : query) {
|
||||||
StringBuffer form = new StringBuffer();
|
String userName;
|
||||||
|
try {
|
||||||
|
userName = new String(Base64.encodeBase64(RSAUtils.encryptByKey(
|
||||||
|
RSAUtils.getPublicKey(Base64.decodeBase64(RSAUtils.publicKey)),
|
||||||
|
query_one.getString("username").getBytes())));
|
||||||
|
}catch (Exception e){
|
||||||
|
ErrorCode errorCode = new ErrorCode("error_code", "公钥加密出现异常,请联系运维人员排查!");
|
||||||
|
throw new KDException(errorCode, e);
|
||||||
|
}
|
||||||
|
StringBuilder form = new StringBuilder();
|
||||||
// BacklogMessage backlogMessage = new BacklogMessage();
|
// BacklogMessage backlogMessage = new BacklogMessage();
|
||||||
form.append("{");
|
form.append("{");
|
||||||
form.append("\"title\":");
|
form.append("\"title\":");
|
||||||
form.append("\""+todoInfo.getTitle()+"\",");
|
form.append("\"").append(todoInfo.getTitle()).append("\",");
|
||||||
form.append("\"bName\":");
|
form.append("\"bName\":");
|
||||||
form.append("\""+ctx.getEntityName()+"\",");
|
form.append("\"").append(ctx.getEntityName()).append("\",");
|
||||||
form.append("\"bussinessCode\":");
|
form.append("\"bussinessCode\":");
|
||||||
form.append("\""+dynamicObject.getString("billno")+"\",");
|
form.append("\"").append(dynamicObject.getString("billno")).append("\",");
|
||||||
form.append("\"urGency\":");
|
form.append("\"urGency\":");
|
||||||
form.append("\"0\",");
|
form.append("\"0\",");
|
||||||
form.append("\"currentStepName\":");
|
form.append("\"currentStepName\":");
|
||||||
form.append("\""+dynamicObject.getString("name")+"\",");
|
form.append("\"").append(dynamicObject.getString("name")).append("\",");
|
||||||
form.append("\"sendUserName\":");
|
form.append("\"sendUserName\":");
|
||||||
form.append("\""+dynamicObject.getString("startname")+"\",");
|
form.append("\"").append(dynamicObject.getString("startname")).append("\",");
|
||||||
form.append("\"receiveUsersysName\":");
|
form.append("\"receiveUsersysName\":");
|
||||||
form.append("\""+query_one.getString("username")+"\",");
|
form.append("\"").append(query_one.getString("username")).append("\",");
|
||||||
form.append("\"receiveUserId\":");
|
form.append("\"receiveUserId\":");
|
||||||
form.append("\""+query_one.getString("username")+"\",");
|
form.append("\"").append(query_one.getString("username")).append("\",");
|
||||||
form.append("\"handleUrl\":");
|
form.append("\"handleUrl\":");
|
||||||
form.append("\""+todoInfo.getUrl()+"&number="+query_one.getString("number")+"\",");
|
form.append("\"").append(todoInfo.getUrl()).append("&userName=").append(userName).append("\",");
|
||||||
form.append("\"appHandleUrl\":");
|
form.append("\"appHandleUrl\":");
|
||||||
form.append("\""+todoInfo.getUrl()+"&number="+query_one.getString("number")+"\",");
|
form.append("\"").append(todoInfo.getUrl()).append("&userName=").append(userName).append("\",");
|
||||||
form.append("\"appName\":");
|
form.append("\"appName\":");
|
||||||
form.append("\""+ctx.getEntityName()+"\",");
|
form.append("\"").append(ctx.getEntityName()).append("\",");
|
||||||
form.append("\"pendingId\":");
|
form.append("\"pendingId\":");
|
||||||
form.append("\""+todoInfo.getTaskId()+"\",");
|
form.append("\"").append(todoInfo.getTaskId()).append("\",");
|
||||||
form.append("\"pendingAttr\":");
|
form.append("\"pendingAttr\":");
|
||||||
form.append("\"0\"");
|
form.append("\"0\"");
|
||||||
form.append("}");
|
form.append("}");
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
package shkd.sys.sys.utils;
|
||||||
|
|
||||||
|
import org.apache.commons.codec.binary.Base64;
|
||||||
|
|
||||||
|
import javax.crypto.BadPaddingException;
|
||||||
|
import javax.crypto.Cipher;
|
||||||
|
import javax.crypto.IllegalBlockSizeException;
|
||||||
|
import javax.crypto.NoSuchPaddingException;
|
||||||
|
import java.security.*;
|
||||||
|
import java.security.spec.InvalidKeySpecException;
|
||||||
|
import java.security.spec.PKCS8EncodedKeySpec;
|
||||||
|
import java.security.spec.X509EncodedKeySpec;
|
||||||
|
|
||||||
|
public class RSAUtils {
|
||||||
|
|
||||||
|
private static Provider provider;
|
||||||
|
|
||||||
|
public static String publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyUK5/Oy6WQzOj+BSuT4jI7PIM3i18fCXdfv3R47UmxdSvAR64myjuCGQxbiiPI4jGBPn4rB+Jh8LbBm7vCD+04Qry6QIKBDjlVAFFhSdP8BDdryve+1WXfT2mG7Ma11pU/wjITwa4yM+YwKbfpv/jM4TZDkejR/Z0tEEzrACQwb9p+Wxjvi27S8nPDCGX6wvmq2rmpzMUZVWCXPg8ox2F9UYMCziQJcGBFBz8vcYfTrAtMaBDmBok/ZqfIS6V7n0Bjozvb2EAtABF9SwIzKmVnYKv0KRVBVRKgmtYJ3apYblYCtg4LjkffMo9uum4QYBfYvUGmnvDGxufbn22k0xqwIDAQAB";
|
||||||
|
|
||||||
|
public static String privateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDJQrn87LpZDM6P4FK5PiMjs8gzeLXx8Jd1+/dHjtSbF1K8BHribKO4IZDFuKI8jiMYE+fisH4mHwtsGbu8IP7ThCvLpAgoEOOVUAUWFJ0/wEN2vK977VZd9PaYbsxrXWlT/CMhPBrjIz5jApt+m/+MzhNkOR6NH9nS0QTOsAJDBv2n5bGO+LbtLyc8MIZfrC+arauanMxRlVYJc+DyjHYX1RgwLOJAlwYEUHPy9xh9OsC0xoEOYGiT9mp8hLpXufQGOjO9vYQC0AEX1LAjMqZWdgq/QpFUFVEqCa1gndqlhuVgK2DguOR98yj266bhBgF9i9Qaae8MbG59ufbaTTGrAgMBAAECggEAB5Hj7vh0dd7+cfjtA5yrs68Sa6Uxqrzy5XQps95SbtbsvLeqa5PMgKN6j4VHTOHHviMZiLQ8unBWfKVnI0dWblw9TXaI/ADOnpIY7uCtnXU81F16eD3QDs6k68zXEX689HS6WYiqNjrgINc7RALYFNK3dgCT/pjhF4XXGXMTUrQChoCamJ6t9eag+tGlXwF8g2lIzoVJtFMaw88cxtcsIi3LJAa1mmdxJGZMXg/pghu2NZw48Hzn4+vNvqFmo/MKGxWbKFAdshDADnaZArH9oUdLQIOau5HKH4nApZKQMn5gA3Ui20DHm1CK9AG0ttm2jRFMgMrJ+guIWXS1p7jVoQKBgQDrCtpILNJgEyVF+hZBD8PCOKZywctz+4aa7w2WAIPVX75bYVcgHq+g8mH8KPHkri6NjcoJ7gwMVhkoHjoYKPMEE7+8AhCp1e+9UkB2uLiexUpjPKTty1qAm1LY7mQzzinfMC3pmSNxFwSHsfuYu7AnqvGtSiXbUxaVtYfhdFWVEQKBgQDbNMMD5RS6SJTz58neOKjQkvbk9ASFjYkPwMlPACnCifw4uXTmrWAEMNWRMigkVRmq92BQ1ZIdOGRN2dzU7lEpQv7ApaE4P4YAw4mvkkCrG+1kBmvd/F5qpIlSmFFatdzraRgfsLjGlE0BYYhwIE5U6ZHItmA+1zE/zmu2A/tq+wKBgAgUhm6Gw/Czl8txDoTMEvHBWs+FJAZntjfrUe8/M0kJkpS3ovQiuezxiDbP/YjcCBOrtS9kNJvT9edwKpUcC0avmx7Of14nUaeThU3PieFDbQw+UHkwTXswW8fDYkR5qOzYTivCrPo9TVWQ49JbWXHzqX1ImEaS86rP48z3X93RAoGBANbr5EjtUmVSxLhfio1XAC1/6pKQrd5D5x6K5tWOU2Np5uG28+c4FewF9V9mzfTRe1klMkoPHDOKFs49zUb4YpsSFLTNsER2A+y7y0NZIg6iUx6/LQN5bRkiOYHB1gIaTYCCiiSIIKKSxO2VszA8fJDEcStZpQP3+VGWEgVj4h4BAoGBANxD5ATfQLPVDCrGUH/ikzv7ySW8XuAooD2Z/uNDpe2V0X7b9aiGIlRrHMFGHzAM9HVU371xVcwvTKnp9k8uQzzjaCXipCfoHThDB5Yd4HZkfBGCxiQrl85dyn2Tw2026cewH0dKg2GBaQx+cvpbbcXmCUUdkgF3gUVzdoDBTUOH";
|
||||||
|
|
||||||
|
static {
|
||||||
|
provider = new org.bouncycastle.jce.provider.BouncyCastleProvider();
|
||||||
|
Security.addProvider(provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
public static KeyPair generateKeyPair() throws NoSuchAlgorithmException {
|
||||||
|
SecureRandom random = new SecureRandom();
|
||||||
|
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", provider);
|
||||||
|
int length = 2048;
|
||||||
|
generator.initialize(length, random);
|
||||||
|
return generator.generateKeyPair();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
public static PublicKey getPublicKey(byte[] keyBytes) throws NoSuchAlgorithmException, InvalidKeySpecException {
|
||||||
|
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
|
||||||
|
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
|
||||||
|
return keyFactory.generatePublic(keySpec);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static byte[] encryptByKey(Key keys, byte[] byteArray) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
|
||||||
|
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding", provider);
|
||||||
|
cipher.init(Cipher.ENCRYPT_MODE, keys);
|
||||||
|
return cipher.doFinal(byteArray);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
public static PrivateKey getPrivateKey(byte[] keyBytes) throws NoSuchAlgorithmException, InvalidKeySpecException {
|
||||||
|
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
|
||||||
|
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
|
||||||
|
return keyFactory.generatePrivate(keySpec);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
public static byte[] decryptByKey(Key keys, byte[] byteArray) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
|
||||||
|
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding", provider);
|
||||||
|
cipher.init(Cipher.DECRYPT_MODE, keys);
|
||||||
|
return cipher.doFinal(byteArray);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public static String generateBase64Key(byte[] keys) {
|
||||||
|
return new String(Base64.encodeBase64(keys));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,78 @@
|
||||||
|
package shkd.sys.sys.utils;
|
||||||
|
|
||||||
|
|
||||||
|
import org.apache.commons.codec.binary.Base64;
|
||||||
|
|
||||||
|
import java.net.URLDecoder;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
import java.security.KeyPair;
|
||||||
|
import java.security.PrivateKey;
|
||||||
|
|
||||||
|
import static org.apache.commons.lang.CharEncoding.UTF_8;
|
||||||
|
|
||||||
|
public class UtilsTest {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
try {
|
||||||
|
//encrypt Data
|
||||||
|
String data = "19185669029-lang";
|
||||||
|
KeyPair keyPair = RSAUtils.generateKeyPair();
|
||||||
|
//公钥生成 提供给第三方
|
||||||
|
String publicKey = RSAUtils.generateBase64Key(keyPair.getPublic().getEncoded());
|
||||||
|
String encryptData = new String(Base64.encodeBase64(RSAUtils.encryptByKey(
|
||||||
|
RSAUtils.getPublicKey(Base64.decodeBase64(publicKey)), data.getBytes())));
|
||||||
|
String encode_encryptData = URLEncoder.encode(encryptData, UTF_8);
|
||||||
|
|
||||||
|
//私钥生成 星瀚解密使用
|
||||||
|
String privateKey = RSAUtils.generateBase64Key(keyPair.getPrivate().getEncoded());
|
||||||
|
String encode_privateKey = URLEncoder.encode(privateKey, UTF_8);
|
||||||
|
String url = String.format("http://localhost:8080/login/login.jsp?data=%s&key=%s", encode_encryptData, encode_privateKey);
|
||||||
|
//密文 URL 解码
|
||||||
|
String originalData = URLDecoder.decode(encode_encryptData, UTF_8);
|
||||||
|
//解密
|
||||||
|
PrivateKey privateKey1 = RSAUtils.getPrivateKey(Base64.decodeBase64(privateKey));
|
||||||
|
String sourceData = new String(RSAUtils.decryptByKey(privateKey1, Base64.decodeBase64(originalData.getBytes())));
|
||||||
|
|
||||||
|
System.out.println(sourceData);
|
||||||
|
}catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
// try{
|
||||||
|
// /**
|
||||||
|
// * 生成公钥密钥
|
||||||
|
// */
|
||||||
|
// KeyPair keyPair = RSAUtils.generateKeyPair();
|
||||||
|
// //公钥生成 提供给第三方
|
||||||
|
// String publickey = kd.bos.login.utils.RSAUtils.generateBase64Key(keyPair.getPublic().getEncoded());
|
||||||
|
// System.out.println("公钥:"+publickey);
|
||||||
|
// //私钥生成 星瀚解密使用
|
||||||
|
// String privateKey = kd.bos.login.utils.RSAUtils.generateBase64Key(keyPair.getPrivate().getEncoded());
|
||||||
|
// System.out.println("密钥:"+privateKey);
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 加密
|
||||||
|
// */
|
||||||
|
// String phone = "17299999999";
|
||||||
|
// String encrptData = new String(Base64.encodeBase64(RSAUtils.encryptByKey(RSAUtils.getPublicKey(Base64.decodeBase64(publickey)),phone.getBytes())));
|
||||||
|
// System.out.println("密文:"+encrptData);
|
||||||
|
// String UTF8encrptData = URLEncoder.encode(encrptData,UTF_8);
|
||||||
|
// System.out.println("密文UTF_8:"+UTF8encrptData);
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * 解密
|
||||||
|
// */
|
||||||
|
// String data = new String(RSAUtils.decryptByKey(RSAUtils.getPrivateKey(Base64.decodeBase64(privateKey)), Base64.decodeBase64(UTF8encrptData)));
|
||||||
|
// System.out.println(data);
|
||||||
|
//// String timeStamp = System.currentTimeMillis() + "";
|
||||||
|
//// System.out.println(timeStamp);
|
||||||
|
//// String secret = "hjfdshfksdahfkjds";
|
||||||
|
//// String shaDta = SHAUtils.getSHA256Hex(encrptData + timeStamp + secret);
|
||||||
|
//// System.out.println(shaDta);
|
||||||
|
//
|
||||||
|
// }catch (Exception e){
|
||||||
|
// e.printStackTrace();
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue