Ver Fonte

<feat>:新增
1、新增泛微免登录插件代码

wanghaiwu há 1 semana atrás
pai
commit
c4932d9b5e

+ 63 - 48
code/jyyy/nckd-jimin-jyyy-bd/src/main/java/nckd/jimin/jyyy/bd/common/oauth/FanWeiSSOAuthtication.java

@@ -1,16 +1,9 @@
 package nckd.jimin.jyyy.bd.common.oauth;
 
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import kd.bos.dataentity.entity.DynamicObject;
 import kd.bos.dataentity.entity.DynamicObjectCollection;
-import kd.bos.dataentity.resource.ResManager;
 import kd.bos.dc.api.model.Account;
-import kd.bos.entity.AppInfo;
-import kd.bos.entity.AppMetadataCache;
-import kd.bos.entity.param.AppParam;
-import kd.bos.exception.ErrorCode;
-import kd.bos.exception.KDException;
 import kd.bos.logging.Log;
 import kd.bos.logging.LogFactory;
 import kd.bos.login.thirdauth.app.AppAuthResult;
@@ -20,14 +13,9 @@ import kd.bos.orm.query.QCP;
 import kd.bos.orm.query.QFilter;
 import kd.bos.sdk.util.KHttpClientUtils;
 import kd.bos.servicehelper.BusinessDataServiceHelper;
-import kd.bos.servicehelper.parameter.SystemParamServiceHelper;
-import kd.bos.workflow.exception.WFErrorCode;
-import kd.bos.workflow.exception.WFMessageServiceException;
-import nckd.jimin.jyyy.bd.plugin.msg.ecology.HttpUtils;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
-
 import javax.servlet.http.HttpServletRequest;
 import java.io.IOException;
 import java.util.HashMap;
@@ -78,7 +66,7 @@ public class FanWeiSSOAuthtication extends ThirdAppAuthtication {
             if (ObjectUtils.isEmpty(commonParam)) {
                 logger.info("FanWeiSSOAuthtication:nckd_commonparams is null");
 
-                result.setErrorMessage("FanWeiSSOAuthtication:未配置泛微相关参数");
+                result.setErrorMessage("FanWeiSSOAuthtication:未配置泛微相关参数nckd_commonparams");
                 return result;
             }
 
@@ -96,47 +84,74 @@ public class FanWeiSSOAuthtication extends ThirdAppAuthtication {
             if(StringUtils.isEmpty(userUrl)){
                 logger.info("FanWeiSSOAuthtication:getuserinfo is null");
 
-                result.setErrorMessage("FanWeiSSOAuthtication:未配置泛微相关参数");
+                result.setErrorMessage("FanWeiSSOAuthtication:未配置泛微相关参数getuserinfo");
+                return result;
+            }
+
+            String privateKey = mapentity.get("privatekey");
+            if(StringUtils.isEmpty(userUrl)){
+                logger.info("FanWeiSSOAuthtication:privatekey is null");
+
+                result.setErrorMessage("FanWeiSSOAuthtication:未配置泛微相关参数privatekey");
                 return result;
             }
 
+            String syscode = mapentity.get("syscode");
+            if(StringUtils.isEmpty(syscode)){
+                logger.info("FanWeiSSOAuthtication:syscode is null");
+
+                result.setErrorMessage("FanWeiSSOAuthtication:未配置泛微相关参数syscode");
+                return result;
+            }
+
+            String isDecode = mapentity.get("isdecode");
+
             String ssouser_dev = mapentity.get("ssouser_dev");
             String user = "";
 
-//            String apiResult = "";
-//
-//            Map<String, String> header = new HashMap<>();
-//            header.put("Content-Type", "application/json; charset=UTF-8");
-//
-//            //获取token
-//            try {
-//                userUrl = userUrl + "?eteams_token=" + token;
-//                logger.info("获取泛微用户url:" + userUrl);
-//
-//                apiResult = KHttpClientUtils.postjson(userUrl, header, null);
-//            } catch (IOException e) {
-//                logger.info(e.getMessage());
-//
-//                logger.info("FanWeiSSOAuthtication:getuserinfo fail");
-//
-//                result.setErrorMessage("FanWeiSSOAuthtication:获取用户异常" + e.getMessage());
-//                return result;
-//            }
-//
-//            if(kd.bos.util.StringUtils.isEmpty(apiResult)){
-//                logger.info("FanWeiSSOAuthtication:getuserinfo fail");
-//
-//                result.setErrorMessage("FanWeiSSOAuthtication:获取用户异常");
-//                return result;
-//            }
-//
-//            JSONObject userInfo = JSONObject.parseObject(apiResult);
-//            if(userInfo.get("mobile") == null){
-//                logger.info("FanWeiSSOAuthtication:getuserinfo fail");
-//
-//                result.setErrorMessage("FanWeiSSOAuthtication:获取用户异常");
-//                return result;
-//            }
+            String apiResult = "";
+
+            Map<String, String> header = new HashMap<>();
+            header.put("Content-Type", "application/json; charset=UTF-8");
+
+            //获取token
+            try {
+                userUrl = userUrl + "?eteam_token=" + token + "&xybs=" + syscode;
+
+                logger.info("获取泛微用户url:" + userUrl);
+
+                apiResult = KHttpClientUtils.postjson(userUrl, header, "{}");
+            } catch (IOException e) {
+                logger.info(e.getMessage());
+
+                logger.info("FanWeiSSOAuthtication:getuserinfo fail");
+
+                result.setErrorMessage("FanWeiSSOAuthtication:获取用户异常" + e.getMessage());
+                return result;
+            }
+
+            if(kd.bos.util.StringUtils.isEmpty(apiResult)){
+                logger.info("FanWeiSSOAuthtication:getuserinfo fail");
+
+                result.setErrorMessage("FanWeiSSOAuthtication:获取用户异常");
+                return result;
+            }
+
+            String userJSONString = "";
+            if(isDecode != null && "true".equals(isDecode)) {
+                userJSONString = new String(RSAUtils.decryptByKey(RSAUtils.getPrivateKey(Base64.decodeBase64(privateKey))
+                        , Base64.decodeBase64(apiResult.getBytes("UTF-8"))));
+            }
+
+            JSONObject userInfo = JSONObject.parseObject(userJSONString);
+            if(userInfo.get("jobNum") == null){
+                logger.info("FanWeiSSOAuthtication:getuserinfo fail");
+
+                result.setErrorMessage("FanWeiSSOAuthtication:获取用户异常");
+                return result;
+            }
+
+            user = userInfo.getString("jobNum");
 
             if(StringUtils.isNotEmpty(ssouser_dev)){
                 user = ssouser_dev;

+ 38 - 3
code/jyyy/nckd-jimin-jyyy-bd/src/main/java/nckd/jimin/jyyy/bd/common/oauth/RSAUtils.java

@@ -6,6 +6,7 @@ import javax.crypto.BadPaddingException;
 import javax.crypto.Cipher;
 import javax.crypto.IllegalBlockSizeException;
 import javax.crypto.NoSuchPaddingException;
+import java.io.ByteArrayOutputStream;
 import java.security.*;
 import java.security.spec.InvalidKeySpecException;
 import java.security.spec.PKCS8EncodedKeySpec;
@@ -30,7 +31,7 @@ public class RSAUtils {
         SecureRandom random = new SecureRandom();
 
         KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", provider);
-        Integer length = 2048;//加密算法位数
+        Integer length = 1024;//加密算法位数
         generator.initialize(length, random);
         return generator.generateKeyPair();
     }
@@ -90,8 +91,42 @@ public class RSAUtils {
         // 初始化
         cipher.init(Cipher.DECRYPT_MODE, keys);
         // doFinal(): 加密或者解密数据
-        byte[] plainText = cipher.doFinal(byteArray);
-        return plainText;
+//        byte[] plainText = cipher.doFinal(byteArray);
+
+        byte[] bytes = processData(cipher, byteArray, 1024 / 8);
+
+        return bytes;
+    }
+
+    /**
+     * 分段处理数据.
+     *
+     * @param cipher      密码算法
+     * @param dataes      数据
+     * @param segmentSize 分段大小(小于等于0不分段)
+     * @return
+     */
+    private static byte[] processData(Cipher cipher, byte[] dataes, int segmentSize) {
+        byte[] decBytes = null;
+        try {
+            ByteArrayOutputStream out = new ByteArrayOutputStream();
+            int inputLength = dataes.length;
+            int offSet = 0;
+            for (int i = 0; inputLength - offSet > 0; offSet = i * segmentSize) {
+                byte[] cache;
+                if (inputLength - offSet > segmentSize) {
+                    cache = cipher.doFinal(dataes, offSet, segmentSize);
+                } else {
+                    cache = cipher.doFinal(dataes, offSet, inputLength - offSet);
+                }
+                out.write(cache, 0, cache.length);
+                ++i;
+            }
+            decBytes = out.toByteArray();
+            out.close();
+        } catch (Exception e) {
+        }
+        return decBytes;
     }
 
     /**