5c19574477cf8cd7f03096dfbddadbd6a6915ef7.svn-base 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. package com.kingdee.customer.Auth.handler;
  2. import com.aliyun.odps.utils.StringUtils;
  3. import com.kingdee.bos.BOSException;
  4. import com.kingdee.bos.Context;
  5. import com.kingdee.eas.cp.eip.sso.util.CloudParamUtil;
  6. import com.kingdee.eas.util.StringUtil;
  7. import com.kingdee.eas.util.app.DbUtil;
  8. import com.kingdee.jdbc.rowset.IRowSet;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. import javax.servlet.ServletException;
  12. import javax.servlet.http.HttpServlet;
  13. import javax.servlet.http.HttpServletRequest;
  14. import javax.servlet.http.HttpServletResponse;
  15. import javax.servlet.http.HttpSession;
  16. import java.io.IOException;
  17. import java.net.URLEncoder;
  18. import java.sql.SQLException;
  19. import java.util.Base64;
  20. import java.util.HashMap;
  21. import java.util.Map;
  22. import java.util.Set;
  23. /**
  24. * @author dengzhouhong
  25. * @version 1.0.0
  26. * @ClassName UserEasAuthServlet.java
  27. * @Description TODO
  28. * @createTime 2024年01月09日 16:24
  29. */
  30. public class UserEasAuthServlet extends HttpServlet{
  31. private final Logger logger = LoggerFactory.getLogger(UserEasAuthServlet.class);
  32. public UserEasAuthServlet() {
  33. super();
  34. }
  35. /**
  36. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  37. */
  38. @Override
  39. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  40. logger.error("into TestServlet.doGet");
  41. //标准版流程助手
  42. String url = "http://bos.kingdee.com/workflow/main.html?";
  43. String wfversion = request.getParameter("wfversion");
  44. String storeEid = request.getParameter("storeEid");
  45. //移动bos版本流程助手,客户有使用移动bos可使用这个版本
  46. //if("mbos".equals(wfversion)){
  47. /**
  48. * https://mbos.kdeascloud.com/mbos/page/loadPage?
  49. * path=cmpSubmit88sp1&name=submitbill.editui
  50. * &lczstype=list&cometype=havedo&billID=SPKUhmbQSQifgjFU2ESznbEdulw%3D
  51. * &assignId=22910d25-d1b4-425c-9e87-eaa287f438b6WFWKITEM
  52. * &fprocinstid=653327bb-c464-4472-aa8d-c60b35000674WFPCINST
  53. * &operateState=VIEW&lczsapprove=9444be02b9d40929508ff587f216a64e&canChangeLanguage=1
  54. * &eid=ww434cb2a638701cdd&appid=10036
  55. *
  56. * https://mbos.kdeascloud.com/mbos/page/loadPage?storeEid=21231
  57. * &path=lczs2&name=approveui.navui
  58. *
  59. * &eid=ww434cb2a638701cdd&appid=10036
  60. * &token=ZmVuZy5jaGVu
  61. *
  62. *
  63. *
  64. * &cometype=todo&assignId=22910d25-d1b4-425c-9e87-eaa287f438b6WFWKITEM
  65. *
  66. *
  67. */
  68. /**
  69. * https://mbos.kdeascloud.com/mbos/page/loadPage?
  70. * * path=cmpSubmit88sp1&name=submitbill.editui
  71. * * &lczstype=list&cometype=havedo&billID=SPKUhmbQSQifgjFU2ESznbEdulw%3D
  72. * * &assignId=22910d25-d1b4-425c-9e87-eaa287f438b6WFWKITEM
  73. * * &fprocinstid=653327bb-c464-4472-aa8d-c60b35000674WFPCINST
  74. * * &operateState=VIEW&lczsapprove=9444be02b9d40929508ff587f216a64e&canChangeLanguage=1
  75. *
  76. *
  77. */
  78. //url = "https://mbos.kdeascloud.com/mbos/page/loadPage?storeEid=21231&path=lczs2&name=approveui.navui";
  79. //TODO:加入的代码拼接跳转的参数
  80. String assignmentId = "";
  81. HttpSession session = request.getSession();
  82. if (session != null) {
  83. Map<String, String> assignmentMap = (Map) session.getAttribute("assignment");
  84. if (assignmentMap != null && assignmentMap.size() > 0) {
  85. assignmentId = assignmentMap.get("assignmentId");
  86. logger.info("onSuccessfulValidation......assignmentId:" + assignmentId);
  87. }
  88. }
  89. String billId = "";
  90. String procinstId = "";
  91. String actdefId = "";
  92. String procdefId ="";
  93. try {
  94. Map<String,String> paramMap = getParamMapByAssignId(assignmentId);
  95. billId = paramMap.get("billId");
  96. procinstId = paramMap.get("procinstId");
  97. actdefId = paramMap.get("actdefId");
  98. procdefId = paramMap.get("procdefId");
  99. } catch (BOSException e) {
  100. logger.error("TestServlet.doGet" + e.getMessage());
  101. throw new ServletException(e.getMessage());
  102. }
  103. //encode转换一下
  104. if(!StringUtils.isEmpty(billId)){
  105. billId = URLEncoder.encode(billId);
  106. }
  107. //url = "https://mbos.kdeascloud.com/mbos/page/loadPage?path=cmpSubmit88sp1&name=submitbill.editui&billID="+billId+"&fprocinstid="+procinstId+"&operateState=VIEW&lczsapprove=9444be02b9d40929508ff587f216a64e&canChangeLanguage=1";
  108. url = "&billID="+billId+"&fprocinstid="+procinstId+"&operateState=VIEW&lczsapprove=9444be02b9d40929508ff587f216a64e&canChangeLanguage=0";
  109. if (storeEid != null && !"".equals(storeEid) && !"null".equals(storeEid)) {
  110. url = url.replace("storeEid=21231", "storeEid=" + storeEid);
  111. }
  112. //}
  113. Map<String, String> infoMap = null;
  114. try {
  115. infoMap = encryptUserInfo(request);
  116. } catch (Exception e) {
  117. e.printStackTrace();
  118. }
  119. Set<String> keySet = infoMap.keySet();
  120. for (String key : keySet) {
  121. url += "&" + key + "=" + infoMap.get(key);
  122. }
  123. url = url.replace("?&", "?");
  124. url += "&cometype=havedo&assignId=" + assignmentId;
  125. //替换url: url.replace("page/loadPage", "mbosw/getWorkflowUrl");
  126. String urlR = "";
  127. try {
  128. urlR = getUrlByWorkflow(actdefId,procdefId);
  129. } catch (BOSException e) {
  130. logger.error("TestServlet.getUrlByWorkflow" + e.getMessage());
  131. throw new ServletException(e.getMessage());
  132. }
  133. if(StringUtils.isEmpty(urlR)){
  134. //静态列的显示地址
  135. urlR = "https://mbos.kdeascloud.com/mbos/page/loadPage?storeEid=21231&path=lczs2&name=approveui.navui";
  136. if (storeEid != null && !"".equals(storeEid) && !"null".equals(storeEid)) {
  137. urlR = urlR.replace("storeEid=21231", "storeEid=" + storeEid);
  138. }
  139. //https://mbos.kdeascloud.com/mbos/page/loadPage?storeEid=21231&path=lczs2&name=approveui.navui&eid=ww434cb2a638701cdd&appid=10036&token=ZmVuZy5jaGVu&cometype=todo&assignId=22910d25-d1b4-425c-9e87-eaa287f438b6WFWKITEM
  140. Set<String> keySet2 = infoMap.keySet();
  141. for (String key : keySet2) {
  142. urlR += "&" + key + "=" + infoMap.get(key);
  143. }
  144. urlR = urlR.replace("?&", "?");
  145. urlR += "&canChangeLanguage=0&cometype=todo&assignId=" + assignmentId;
  146. logger.info("静态列的显示地址:OtherAppPortalServlet.doget.urlR:" + urlR);
  147. }else{
  148. //动态列的显示
  149. urlR = urlR +url;
  150. urlR = urlR.replace("page/loadPage", "mbosw/getWorkflowUrl");
  151. logger.info("动态态列的显示地址:OtherAppPortalServlet.doget.urlR:" + urlR);
  152. }
  153. logger.info("OtherAppPortalServlet.doget.url:" + urlR);
  154. response.sendRedirect(urlR);
  155. }
  156. @Override
  157. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  158. // TODO Auto-generated method stub
  159. doGet(request, response);
  160. }
  161. /**
  162. * accessurl
  163. * 如果第三方app点击链接带token,这方法可以不写,将流程助手主页作为应用url,getLoginInfoByToken中根据第三方app的token解析到用户信息即可
  164. * 如果第三方app点击链接不带token,将此接口作为应用的url,方法内获取第三方app用户对应的eas用户信息,方法返回值resultMap存跳转到流程助手的参数
  165. * http://localhost:8080/otherapp/index?eid=21231&appid=10036&param=zhangsan
  166. */
  167. public Map<String, String> encryptUserInfo(HttpServletRequest request) throws ServletException {
  168. HashMap<String, String> resultMap = new HashMap<String, String>();
  169. String param = request.getParameter("param");
  170. //下面三个参数为跳转流程助手主页参数
  171. String eid = request.getParameter("eid");
  172. String appid = request.getParameter("appid");
  173. String token = "";
  174. //........根据第三方app传来的参数,取到eas用户信息
  175. try {
  176. token = encrypt_Base64(param);
  177. } catch (Exception e) {
  178. logger.error("encryptUserInfo encrypt_Base64 Exception" + e.getMessage());
  179. throw new ServletException(e.getMessage());
  180. }
  181. logger.info("encryptUserInfo.token:"+token);
  182. resultMap.put("eid", eid);
  183. resultMap.put("appid", appid == null ? "10036" : appid);
  184. resultMap.put("token", token);
  185. return resultMap;
  186. }
  187. /***
  188. * Base64加密
  189. * @param str 需要加密的参数
  190. * @return
  191. * @throws Exception
  192. */
  193. private static String encrypt_Base64(String str) throws Exception {
  194. if(StringUtils.isEmpty(str)){
  195. return "";
  196. }
  197. String result = Base64.getEncoder().encodeToString(str.getBytes("UTF-8"));
  198. return result;
  199. }
  200. /**
  201. * 通过assignId 查询出billId 和fprocinstId,actdefId
  202. * @param assignId
  203. * @return
  204. */
  205. private Map<String,String> getParamMapByAssignId(String assignId) throws BOSException {
  206. Map<String,String> paramMap = new HashMap<String,String>();
  207. String dataCenter=ConfigAddressServletUtil.getProperty("dataCenter");
  208. String locale=ConfigAddressServletUtil.getProperty("locale");
  209. Context ctx = CloudParamUtil.getContext(dataCenter, locale, "administrator");
  210. String sql = "select fbizobjid as billId,fprocinstid as procinstId,factdefid as actdefId,fprocdefid as procdefId from t_wfr_assign where fassignid = '"+assignId+"'";
  211. logger.info("UserEasAuthServlet.getParamMapByAssignId.sql:"+sql);
  212. String billId = "";
  213. String procinstId = "";
  214. String actdefId = "";
  215. String procdefId = "";
  216. try {
  217. IRowSet result = DbUtil.executeQuery(ctx, sql);
  218. while (result.next()) {
  219. billId = result.getString("billId");
  220. procinstId = result.getString("procinstId");
  221. actdefId = result.getString("actdefId");
  222. procdefId = result.getString("procdefId");
  223. paramMap.put("billId",billId);
  224. paramMap.put("procinstId",procinstId);
  225. paramMap.put("actdefId",actdefId);
  226. paramMap.put("procdefId",procdefId);
  227. }
  228. } catch (SQLException e) {
  229. throw new BOSException(e);
  230. }
  231. return paramMap;
  232. }
  233. /**
  234. * 获取审批的替换的url
  235. * @return
  236. */
  237. private String getUrlByWorkflow(String actdefId,String procdefId) throws BOSException {
  238. String dataCenter=ConfigAddressServletUtil.getProperty("dataCenter");
  239. String locale=ConfigAddressServletUtil.getProperty("locale");
  240. Context ctx = CloudParamUtil.getContext(dataCenter, locale, "administrator");
  241. String sql = " SELECT url FROM T_WFR_MBOS_WORKFLOW where actDefId ='"+actdefId+"' and procdefid = '"+procdefId+"'";
  242. logger.info("UserEasAuthServlet.getUrlByWorkflow.sql:"+sql);
  243. String url = "";
  244. try {
  245. IRowSet result = DbUtil.executeQuery(ctx, sql);
  246. while (result.next()) {
  247. url = result.getString("url");
  248. }
  249. } catch (SQLException e) {
  250. throw new BOSException(e);
  251. }
  252. return url;
  253. }
  254. }