update:第三方待办添加用户名后缀并加密,第三方点击可跳转至审批处理页面

This commit is contained in:
luoluogit 2024-12-17 14:21:22 +08:00
parent 15753ba9ab
commit 92fceb9317
5 changed files with 248 additions and 66 deletions

View File

@ -1,25 +1,24 @@
package shkd.sys.sys.eoss;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import kd.bos.cache.CacheFactory;
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.LogFactory;
import kd.bos.login.thirdauth.ThirdSSOAuthHandler;
import kd.bos.login.thirdauth.UserAuthResult;
import kd.bos.login.thirdauth.UserProperType;
import kd.bos.servicehelper.user.UserServiceHelper;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import shkd.sys.sys.utils.RSAUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.*;
import java.io.IOException;
import java.security.PrivateKey;
import static kd.bos.login.thirdauth.UserProperType.UserName;
/**
* @author: Lang
@ -30,20 +29,19 @@ public class SSOPluginLogin implements ThirdSSOAuthHandler {
private final String CLIENT_ID = System.getProperty("clientKey-scict");
private final String CLIENT_SECRET = System.getProperty("clientSecret-scict");
private final String EOSS_IP = System.getProperty("ip-port");
/**
* 方法实现用户没有登录的时候跳转认证中心的登录地址
* @param httpServletRequest
* @param httpServletResponse
* @param s
*
*/
@Override
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 {
String ssourl= EOSS_IP+"/service/SGE-project-sctz-master/pc/dist/login.html";
if (httpServletRequest.getRequestURI().contains("/auth/logout.do")){
String ssourl = EOSS_IP + "/service/SGE-project-sctz-master/pc/dist/login.html";
if (httpServletRequest.getRequestURI().contains("/auth/logout.do")) {
String userName = UserServiceHelper.getCurrentUser("name").getString("name");
DistributeSessionlessCache cache = CacheFactory.getCommonCacheFactory().getDistributeSessionlessCache("customRegion");
String userKey = "user_sessionId_" + userName; // 构造一个唯一的键
@ -51,13 +49,13 @@ public class SSOPluginLogin implements ThirdSSOAuthHandler {
if (sessionId != null) {
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",
EOSS_IP,CLIENT_ID,s);
logger.info(String.format("重定向地址→sendRedirect%s",ssourl));
ssourl = String.format("%s/sso2/authCenter/authorize?client_id=%s&response_type=code&authType=0&redirect_uri=%s",
EOSS_IP, CLIENT_ID, s);
logger.info(String.format("重定向地址→sendRedirect%s", ssourl));
}
httpServletResponse.sendRedirect(ssourl);
} catch (IOException e) {
@ -67,24 +65,27 @@ public class SSOPluginLogin implements ThirdSSOAuthHandler {
/**
* 实现苍穹调用认证系统的接口解析认证凭据返回用户信息按数据格式返回认证结果
* @param httpServletRequest
* @param httpServletResponse
* @return
*
*/
@Override
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");
//获取返回的 sessionId
String sessionId = httpServletRequest.getParameter("sessionId");
logger.info(String.format("getTrdSSOAuth→授权码code%s",code));
if (StringUtils.isEmpty(code)){
String userName = httpServletRequest.getParameter("userName");
// RSAUtils.
logger.info(String.format("getTrdSSOAuth→授权码code%s", code));
result.setUserType(UserProperType.UserName);
if (StringUtils.isEmpty(code) && StringUtils.isEmpty(userName)) {
logger.error("getTrdSSOAuth→授权码code为空");
result.setSucess(false);
}else {
return result;
} else if (StringUtils.isNotEmpty(code)){
try {
//TODO:调用accessToken方法
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.setSucess(true);
logger.info("SSO用户登录成功进入苍穹系统");
String userKey = "user_sessionId_" + user; // 构造一个唯一的键
DistributeSessionlessCache cache = CacheFactory.getCommonCacheFactory().getDistributeSessionlessCache("customRegion");
cache.put(userKey,sessionId);//将自定义参数加入缓存
cache.put(userKey, sessionId);//将自定义参数加入缓存
}
} 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;

View File

@ -7,6 +7,7 @@ import kd.bos.context.RequestContext;
import kd.bos.dataentity.entity.DynamicObject;
import kd.bos.db.DB;
import kd.bos.db.DBRoute;
import kd.bos.exception.ErrorCode;
import kd.bos.exception.KDException;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
@ -15,11 +16,12 @@ import kd.bos.orm.query.QFilter;
import kd.bos.schedule.executor.AbstractTask;
import kd.bos.servicehelper.QueryServiceHelper;
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.DealToDoHandler;
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.utils.RSAUtils;
import java.util.*;
@ -55,7 +57,7 @@ public class ToDoResendTack extends AbstractTask {
logger.info("组装待办、已办重发的数据");
Date beginTimeDate = startTimeDate;
// 待办
boolean hasNext = true;
// boolean hasNext = true;
logger.info("开始抽取待办,参数 beginTimeDate" + beginTimeDate + "endTimeDate:" + endTimeDate);
extractToDoList(beginTimeDate, endTimeDate, "0");
extractToDoList(beginTimeDate, endTimeDate, "2");
@ -67,13 +69,12 @@ public class ToDoResendTack extends AbstractTask {
* @param startTime 开始时间
* @param endTime 结束时间
* @param t_status 待办状态
* @return
*/
private void extractToDoList(Date startTime, Date endTime, String t_status) {
String accountId = System.getProperty("backlog-accountid");
logger.info("拼接sql,此次拼接的待办类型为:" + t_status + "(1:待办、2已办、5撤销),使用参数startTime" + startTime + "endTime:"
+ endTime);
StringBuffer cwbSql1 = new StringBuffer();
StringBuilder cwbSql1 = new StringBuilder();
cwbSql1.append("SELECT ");
cwbSql1.append("b.FID,");
cwbSql1.append("b.FPROCDEFID,");
@ -172,8 +173,15 @@ public class ToDoResendTack extends AbstractTask {
//接收人手机号
DynamicObject dynamicObject = QueryServiceHelper.queryOne("bos_user", "number,name," +
"phone,username", new QFilter[]{new QFilter("id", "=", next.getString("freceiveuserid"))});
String username = dynamicObject.getString("username");
String number = dynamicObject.getString("number");
String userName;
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) {
case "0":
//标题
@ -186,42 +194,42 @@ public class ToDoResendTack extends AbstractTask {
next.getString("factivityId"),
next.getString("fbusinesskey"),
next.getString("fid"));
StringBuffer form = new StringBuffer();
StringBuilder form = new StringBuilder();
form.append("{");
form.append("\"title\":");
form.append("\""+title+"\",");
form.append("\"").append(title).append("\",");
form.append("\"bName\":");
form.append("\""+next.getString("fentityname")+"\",");
form.append("\"").append(next.getString("fentityname")).append("\",");
form.append("\"bussinessCode\":");
form.append("\""+next.getString("fbillno")+"\",");
form.append("\"").append(next.getString("fbillno")).append("\",");
form.append("\"urGency\":");
form.append("\"0\",");
form.append("\"currentStepName\":");
form.append("\""+next.getString("FNAME")+"\",");
form.append("\"").append(next.getString("FNAME")).append("\",");
form.append("\"sendUserName\":");
form.append("\""+next.getString("fstartname")+"\",");
form.append("\"").append(next.getString("fstartname")).append("\",");
form.append("\"receiveUsersysName\":");
form.append("\""+username+"\",");
form.append("\"").append(userName).append("\",");
form.append("\"receiveUserId\":");
form.append("\""+username+"\",");
form.append("\"").append(userName).append("\",");
form.append("\"handleUrl\":");
form.append("\""+pcUrl+"&number="+number+"\",");
form.append("\"").append(pcUrl).append("&userName=").append(userName).append("\",");
form.append("\"appHandleUrl\":");
form.append("\""+pcUrl+"&number="+number+"\",");
form.append("\"").append(pcUrl).append("&userName=").append(userName).append("\",");
form.append("\"appName\":");
form.append("\""+next.getString("fentityname")+"\",");
form.append("\"").append(next.getString("fentityname")).append("\",");
form.append("\"pendingId\":");
form.append("\""+next.getLong("fid")+"\",");
form.append("\"").append(next.getLong("fid")).append("\",");
form.append("\"pendingAttr\":");
form.append("\"0\"");
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;
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;
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;
default:
break;

View File

@ -2,6 +2,8 @@ package shkd.sys.sys.midservice.servicehandler;
import kd.bos.dataentity.entity.DynamicObject;
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.LogFactory;
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.handler.AbstractServiceHandler;
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.DealToDoHandler;
import shkd.sys.sys.midservice.handler.deleteToDoHandler;
import shkd.sys.sys.utils.RSAUtils;
import java.util.List;
@ -34,38 +38,47 @@ public class BacklogServiceHandle extends AbstractServiceHandler {
//几个待办
List<Long> userIds = todoInfo.getUserIds();
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",
new QFilter[]{new QFilter("id", "=", todoInfo.getTaskId())});
logger.info("####待办taskid:"+todoInfo.getTaskId());
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();
form.append("{");
form.append("\"title\":");
form.append("\""+todoInfo.getTitle()+"\",");
form.append("\"").append(todoInfo.getTitle()).append("\",");
form.append("\"bName\":");
form.append("\""+ctx.getEntityName()+"\",");
form.append("\"").append(ctx.getEntityName()).append("\",");
form.append("\"bussinessCode\":");
form.append("\""+dynamicObject.getString("billno")+"\",");
form.append("\"").append(dynamicObject.getString("billno")).append("\",");
form.append("\"urGency\":");
form.append("\"0\",");
form.append("\"currentStepName\":");
form.append("\""+dynamicObject.getString("name")+"\",");
form.append("\"").append(dynamicObject.getString("name")).append("\",");
form.append("\"sendUserName\":");
form.append("\""+dynamicObject.getString("startname")+"\",");
form.append("\"").append(dynamicObject.getString("startname")).append("\",");
form.append("\"receiveUsersysName\":");
form.append("\""+query_one.getString("username")+"\",");
form.append("\"").append(query_one.getString("username")).append("\",");
form.append("\"receiveUserId\":");
form.append("\""+query_one.getString("username")+"\",");
form.append("\"").append(query_one.getString("username")).append("\",");
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("\""+todoInfo.getUrl()+"&number="+query_one.getString("number")+"\",");
form.append("\"").append(todoInfo.getUrl()).append("&userName=").append(userName).append("\",");
form.append("\"appName\":");
form.append("\""+ctx.getEntityName()+"\",");
form.append("\"").append(ctx.getEntityName()).append("\",");
form.append("\"pendingId\":");
form.append("\""+todoInfo.getTaskId()+"\",");
form.append("\"").append(todoInfo.getTaskId()).append("\",");
form.append("\"pendingAttr\":");
form.append("\"0\"");
form.append("}");

View File

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

View File

@ -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();
// }
}
}