GetSsoOAUrl.java 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package com.kingdee.eas.custom.shrToOA;
  2. import com.kingdee.bos.BOSException;
  3. import com.kingdee.bos.Context;
  4. import com.kingdee.bos.bsf.service.app.IHRMsfService;
  5. import com.kingdee.eas.common.EASBizException;
  6. import com.kingdee.eas.util.app.ContextUtil;
  7. import com.kingdee.shr.elecontract.util.URLUtils;
  8. import okhttp3.*;
  9. import org.apache.commons.lang3.StringUtils;
  10. import org.apache.log4j.Logger;
  11. import java.io.FileInputStream;
  12. import java.io.IOException;
  13. import java.text.MessageFormat;
  14. import java.util.*;
  15. import java.util.Map;
  16. /**
  17. * @Description 获取单点oa地址
  18. * @Date 2025/1/8 17:01
  19. * @Created by Heyuan
  20. */
  21. public class GetSsoOAUrl implements IHRMsfService {
  22. private static Logger logger = Logger.getLogger(GetSsoOAUrl.class);
  23. private static Properties prop = new Properties();
  24. private static String propPath = System.getProperty("EAS_HOME") + "/server/properties/scy/OASSOConfig.properties";
  25. static {
  26. try {
  27. prop.load(new FileInputStream(propPath));
  28. } catch (IOException e) {
  29. logger.error("获取配置文件报错: " + e.getMessage());
  30. e.printStackTrace();
  31. }
  32. }
  33. @Override
  34. public Object process(Context ctx,
  35. Map<String, Object> params) throws EASBizException, BOSException {
  36. String ssoPath = (String) params.get("ssoPath");
  37. Map<String, String> result = new HashMap<>();
  38. String ssoOAUrl = null;
  39. try {
  40. if (StringUtils.isBlank(ssoPath)) {
  41. throw new BOSException("单点地址不能为空!");
  42. }
  43. String token = getToken(ctx);
  44. ssoOAUrl = MessageFormat.format(ssoPath, token);
  45. result.put("result", "success");
  46. result.put("data", ssoOAUrl);
  47. } catch (BOSException e) {
  48. e.printStackTrace();
  49. result.put("result", "error");
  50. result.put("summary", e.getMessage());
  51. }
  52. return result;
  53. }
  54. /**
  55. * 获取 token
  56. */
  57. public String getToken(Context ctx) throws BOSException {
  58. String getSsoTokenUrl = prop.getProperty("getSsoTokenUrl");
  59. String ssoAppid = prop.getProperty("ssoAppid");
  60. StringBuilder errorMsg = new StringBuilder();
  61. if (StringUtils.isBlank(getSsoTokenUrl)) {
  62. errorMsg.append("获取sso接口地址不能为空!\n");
  63. }
  64. if (StringUtils.isBlank(ssoAppid)) {
  65. errorMsg.append("ssoAppid不能为空!\n");
  66. }
  67. if (errorMsg.length() > 0) {
  68. throw new BOSException(errorMsg.toString());
  69. }
  70. String loginId = ContextUtil.getCurrentUserInfo(ctx).getNumber();
  71. Map<String, String> params = new HashMap<>();
  72. params.put("appid", ssoAppid);
  73. params.put("loginid", loginId);
  74. String getUrl = URLUtils.assembleUrl(getSsoTokenUrl, params);
  75. logger.error("getToken getUrl: " + getUrl);
  76. OkHttpClient client = new OkHttpClient();
  77. Request request = new Request.Builder()
  78. .url(getUrl)
  79. .get()
  80. .addHeader("Accept", "*/*")
  81. .addHeader("Accept-Encoding", "gzip, deflate, br")
  82. .addHeader("User-Agent", "PostmanRuntime-ApipostRuntime/1.1.0")
  83. .addHeader("Connection", "keep-alive")
  84. .addHeader("content-type", "multipart/form-data; boundary=---011000010111000001101001")
  85. .build();
  86. try {
  87. Response response = client.newCall(request).execute();
  88. if (response.isSuccessful()) {
  89. return response.body().string();
  90. } else {
  91. throw new BOSException("获取ssoToken超时");
  92. }
  93. } catch (IOException e) {
  94. e.printStackTrace();
  95. throw new BOSException("获取ssoToken报错: " + e.getMessage());
  96. }
  97. }
  98. }