123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283 |
- package com.kingdee.customer.Auth.handler;
- import com.aliyun.odps.utils.StringUtils;
- import com.kingdee.bos.BOSException;
- import com.kingdee.bos.Context;
- import com.kingdee.eas.cp.eip.sso.util.CloudParamUtil;
- import com.kingdee.eas.util.StringUtil;
- import com.kingdee.eas.util.app.DbUtil;
- import com.kingdee.jdbc.rowset.IRowSet;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- import java.io.IOException;
- import java.net.URLEncoder;
- import java.sql.SQLException;
- import java.util.Base64;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Set;
- /**
- * @author dengzhouhong
- * @version 1.0.0
- * @ClassName UserEasAuthServlet.java
- * @Description TODO
- * @createTime 2024年01月09日 16:24
- */
- public class UserEasAuthServlet extends HttpServlet{
- private final Logger logger = LoggerFactory.getLogger(UserEasAuthServlet.class);
- public UserEasAuthServlet() {
- super();
- }
- /**
- * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
- */
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- logger.error("into TestServlet.doGet");
- //标准版流程助手
- String url = "http://bos.kingdee.com/workflow/main.html?";
- String wfversion = request.getParameter("wfversion");
- String storeEid = request.getParameter("storeEid");
- //移动bos版本流程助手,客户有使用移动bos可使用这个版本
- //if("mbos".equals(wfversion)){
- /**
- * https://mbos.kdeascloud.com/mbos/page/loadPage?
- * path=cmpSubmit88sp1&name=submitbill.editui
- * &lczstype=list&cometype=havedo&billID=SPKUhmbQSQifgjFU2ESznbEdulw%3D
- * &assignId=22910d25-d1b4-425c-9e87-eaa287f438b6WFWKITEM
- * &fprocinstid=653327bb-c464-4472-aa8d-c60b35000674WFPCINST
- * &operateState=VIEW&lczsapprove=9444be02b9d40929508ff587f216a64e&canChangeLanguage=1
- * &eid=ww434cb2a638701cdd&appid=10036
- *
- * 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
- *
- *
- */
- /**
- * https://mbos.kdeascloud.com/mbos/page/loadPage?
- * * path=cmpSubmit88sp1&name=submitbill.editui
- * * &lczstype=list&cometype=havedo&billID=SPKUhmbQSQifgjFU2ESznbEdulw%3D
- * * &assignId=22910d25-d1b4-425c-9e87-eaa287f438b6WFWKITEM
- * * &fprocinstid=653327bb-c464-4472-aa8d-c60b35000674WFPCINST
- * * &operateState=VIEW&lczsapprove=9444be02b9d40929508ff587f216a64e&canChangeLanguage=1
- *
- *
- */
- //url = "https://mbos.kdeascloud.com/mbos/page/loadPage?storeEid=21231&path=lczs2&name=approveui.navui";
- //TODO:加入的代码拼接跳转的参数
- String assignmentId = "";
- HttpSession session = request.getSession();
- if (session != null) {
- Map<String, String> assignmentMap = (Map) session.getAttribute("assignment");
- if (assignmentMap != null && assignmentMap.size() > 0) {
- assignmentId = assignmentMap.get("assignmentId");
- logger.info("onSuccessfulValidation......assignmentId:" + assignmentId);
- }
- }
- String billId = "";
- String procinstId = "";
- String actdefId = "";
- String procdefId ="";
- try {
- Map<String,String> paramMap = getParamMapByAssignId(assignmentId);
- billId = paramMap.get("billId");
- procinstId = paramMap.get("procinstId");
- actdefId = paramMap.get("actdefId");
- procdefId = paramMap.get("procdefId");
- } catch (BOSException e) {
- logger.error("TestServlet.doGet" + e.getMessage());
- throw new ServletException(e.getMessage());
- }
- //encode转换一下
- if(!StringUtils.isEmpty(billId)){
- billId = URLEncoder.encode(billId);
- }
- //url = "https://mbos.kdeascloud.com/mbos/page/loadPage?path=cmpSubmit88sp1&name=submitbill.editui&billID="+billId+"&fprocinstid="+procinstId+"&operateState=VIEW&lczsapprove=9444be02b9d40929508ff587f216a64e&canChangeLanguage=1";
- url = "&billID="+billId+"&fprocinstid="+procinstId+"&operateState=VIEW&lczsapprove=9444be02b9d40929508ff587f216a64e&canChangeLanguage=0";
- if (storeEid != null && !"".equals(storeEid) && !"null".equals(storeEid)) {
- url = url.replace("storeEid=21231", "storeEid=" + storeEid);
- }
- //}
- Map<String, String> infoMap = null;
- try {
- infoMap = encryptUserInfo(request);
- } catch (Exception e) {
- e.printStackTrace();
- }
- Set<String> keySet = infoMap.keySet();
- for (String key : keySet) {
- url += "&" + key + "=" + infoMap.get(key);
- }
- url = url.replace("?&", "?");
- url += "&cometype=havedo&assignId=" + assignmentId;
- //替换url: url.replace("page/loadPage", "mbosw/getWorkflowUrl");
- String urlR = "";
- try {
- urlR = getUrlByWorkflow(actdefId,procdefId);
- } catch (BOSException e) {
- logger.error("TestServlet.getUrlByWorkflow" + e.getMessage());
- throw new ServletException(e.getMessage());
- }
- if(StringUtils.isEmpty(urlR)){
- //静态列的显示地址
- urlR = "https://mbos.kdeascloud.com/mbos/page/loadPage?storeEid=21231&path=lczs2&name=approveui.navui";
- if (storeEid != null && !"".equals(storeEid) && !"null".equals(storeEid)) {
- urlR = urlR.replace("storeEid=21231", "storeEid=" + storeEid);
- }
- //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
- Set<String> keySet2 = infoMap.keySet();
- for (String key : keySet2) {
- urlR += "&" + key + "=" + infoMap.get(key);
- }
- urlR = urlR.replace("?&", "?");
- urlR += "&canChangeLanguage=0&cometype=todo&assignId=" + assignmentId;
- logger.info("静态列的显示地址:OtherAppPortalServlet.doget.urlR:" + urlR);
- }else{
- //动态列的显示
- urlR = urlR +url;
- urlR = urlR.replace("page/loadPage", "mbosw/getWorkflowUrl");
- logger.info("动态态列的显示地址:OtherAppPortalServlet.doget.urlR:" + urlR);
- }
- logger.info("OtherAppPortalServlet.doget.url:" + urlR);
- response.sendRedirect(urlR);
- }
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // TODO Auto-generated method stub
- doGet(request, response);
- }
- /**
- * accessurl
- * 如果第三方app点击链接带token,这方法可以不写,将流程助手主页作为应用url,getLoginInfoByToken中根据第三方app的token解析到用户信息即可
- * 如果第三方app点击链接不带token,将此接口作为应用的url,方法内获取第三方app用户对应的eas用户信息,方法返回值resultMap存跳转到流程助手的参数
- * http://localhost:8080/otherapp/index?eid=21231&appid=10036¶m=zhangsan
- */
- public Map<String, String> encryptUserInfo(HttpServletRequest request) throws ServletException {
- HashMap<String, String> resultMap = new HashMap<String, String>();
- String param = request.getParameter("param");
- //下面三个参数为跳转流程助手主页参数
- String eid = request.getParameter("eid");
- String appid = request.getParameter("appid");
- String token = "";
- //........根据第三方app传来的参数,取到eas用户信息
- try {
- token = encrypt_Base64(param);
- } catch (Exception e) {
- logger.error("encryptUserInfo encrypt_Base64 Exception" + e.getMessage());
- throw new ServletException(e.getMessage());
- }
- logger.info("encryptUserInfo.token:"+token);
- resultMap.put("eid", eid);
- resultMap.put("appid", appid == null ? "10036" : appid);
- resultMap.put("token", token);
- return resultMap;
- }
- /***
- * Base64加密
- * @param str 需要加密的参数
- * @return
- * @throws Exception
- */
- private static String encrypt_Base64(String str) throws Exception {
- if(StringUtils.isEmpty(str)){
- return "";
- }
- String result = Base64.getEncoder().encodeToString(str.getBytes("UTF-8"));
- return result;
- }
- /**
- * 通过assignId 查询出billId 和fprocinstId,actdefId
- * @param assignId
- * @return
- */
- private Map<String,String> getParamMapByAssignId(String assignId) throws BOSException {
- Map<String,String> paramMap = new HashMap<String,String>();
- String dataCenter=ConfigAddressServletUtil.getProperty("dataCenter");
- String locale=ConfigAddressServletUtil.getProperty("locale");
- Context ctx = CloudParamUtil.getContext(dataCenter, locale, "administrator");
- String sql = "select fbizobjid as billId,fprocinstid as procinstId,factdefid as actdefId,fprocdefid as procdefId from t_wfr_assign where fassignid = '"+assignId+"'";
- logger.info("UserEasAuthServlet.getParamMapByAssignId.sql:"+sql);
- String billId = "";
- String procinstId = "";
- String actdefId = "";
- String procdefId = "";
- try {
- IRowSet result = DbUtil.executeQuery(ctx, sql);
- while (result.next()) {
- billId = result.getString("billId");
- procinstId = result.getString("procinstId");
- actdefId = result.getString("actdefId");
- procdefId = result.getString("procdefId");
- paramMap.put("billId",billId);
- paramMap.put("procinstId",procinstId);
- paramMap.put("actdefId",actdefId);
- paramMap.put("procdefId",procdefId);
- }
- } catch (SQLException e) {
- throw new BOSException(e);
- }
- return paramMap;
- }
- /**
- * 获取审批的替换的url
- * @return
- */
- private String getUrlByWorkflow(String actdefId,String procdefId) throws BOSException {
- String dataCenter=ConfigAddressServletUtil.getProperty("dataCenter");
- String locale=ConfigAddressServletUtil.getProperty("locale");
- Context ctx = CloudParamUtil.getContext(dataCenter, locale, "administrator");
- String sql = " SELECT url FROM T_WFR_MBOS_WORKFLOW where actDefId ='"+actdefId+"' and procdefid = '"+procdefId+"'";
- logger.info("UserEasAuthServlet.getUrlByWorkflow.sql:"+sql);
- String url = "";
- try {
- IRowSet result = DbUtil.executeQuery(ctx, sql);
- while (result.next()) {
- url = result.getString("url");
- }
- } catch (SQLException e) {
- throw new BOSException(e);
- }
- return url;
- }
- }
|