起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7638|回复: 17

[结贴] 第三方免登陆打开单据详情

[复制链接]

32

主题

93

帖子

193

积分

初级会员

Rank: 2

积分
193
QQ
发表于 2018-1-15 11:30:46 | 显示全部楼层 |阅读模式
如题: 第三方免登陆打开单据详情时 系统会先请求主页,而我的主页是自己修改成了待办任务, 现在的问题是每次第三方免登陆进来新建单据或者审批时 系统都会请求一次主页,然后导致请求了待办任务,导致系统变慢, 能不能避免打开主页这一步?直接跳到我需要打开的详情页面?  我是在页面激活的事件里面刷新了bizData导致会请求待办任务,如果不这样写的话又会导致审批完的数据还显示在我的待办中。 请问有没有好点的解决办法

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36183
发表于 2018-1-15 13:31:20 | 显示全部楼层
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

32

主题

93

帖子

193

积分

初级会员

Rank: 2

积分
193
QQ
 楼主| 发表于 2018-1-15 14:25:32 | 显示全部楼层
jishuang 发表于 2018-1-15 13:31
http://docs.wex5.com/bex5-ui-question-list-10012/

直接跳转到功能页的url参考如下:
http://IP:端口/x5/UI2/appdemo/test/process/textarea/mainActivity.w?process=/appdemo/test/process/textarea/textareaProcess&activity=mainActivity&bsessionid=6D9AF5D19970BBDE55695B4E26671A57
需要在url上传bsessionid参数
注意:传的bsessionid必须是有效的才可以

这个行不通的,新建单据会有bizAction请求, 这个必须是传用户名跟密码的方式登录,但是如果用下面这个方式登录:

直接跳转到功能页并且还有显示门户功能树的url参考人如下:
http://IP:端口/x5/UI2/v_/portal/pc/index.w?username=system&password=E10ADC3949BA59ABBE56E057F20F883E&device=pc#!($model/UI2/appdemo/test/process/loadData/mainActivity.w)


目前我们系统就是这样登录的,进入系统后它会需要先到首页再跳转功能页面,我目前的需求是不希望看到它跳到首页。
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36183
发表于 2018-1-15 14:43:27 | 显示全部楼层
那可以把请求改为.j
在.j中先登录,然后在功能的url上拼接上bsessionid参数,跳转到这个url上
http://docs.wex5.com/bex5-ui-question-list-10258/
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

32

主题

93

帖子

193

积分

初级会员

Rank: 2

积分
193
QQ
 楼主| 发表于 2018-1-15 16:43:33 | 显示全部楼层
jishuang 发表于 2018-1-15 14:43
那可以把请求改为.j
在.j中先登录,然后在功能的url上拼接上bsessionid参数,跳转到这个url上
http://docs. ...

我们是以.J的方式登录的,但是你说的“在功能的url上拼接上bsessionid参数,跳转到这个url上”,这个参数再什么时候去拼接? 我debugger了下  看不出来哪里能改变这个url,能说详细点吗
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36183
发表于 2018-1-15 17:13:07 | 显示全部楼层
4楼的链接中拼接的是index.w,改为你自己的功能的url
确认在跳转前不是获取到bsessionid了吗?把bsessionid做参数拼接到你的.w后面
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

32

主题

93

帖子

193

积分

初级会员

Rank: 2

积分
193
QQ
 楼主| 发表于 2018-1-18 09:57:26 | 显示全部楼层
jishuang 发表于 2018-1-15 17:13
4楼的链接中拼接的是index.w,改为你自己的功能的url
确认在跳转前不是获取到bsessionid了吗?把bsessionid ...

原地址:http://IP:端口/x5/UI2/v_/portal/pc/index.w?username=system&password=E10ADC3949BA59ABBE56E057F20F883E&device=pc#!($model/UI2/appdemo/test/process/loadData/mainActivity.w)


改后地址:http://IP:端口/x5/UI2/appdemo/test/process/loadData/mainActivity.w?username=system&password=E10ADC3949BA59ABBE56E057F20F883E&device=pc
是这样改? 我改了没用,还报错了, 而且你说的在确认跳转前我也不清楚是在什么地方,能否截图说详细点, 或是远程,这个问题拖了快一个礼拜了,只求快点解决,到时候领导要说效率慢了!
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36183
发表于 2018-1-18 10:28:37 | 显示全部楼层
4楼的链接看了吗?
在你的.w中拼接上bsessionid,不需要拼接username和password
然后把跳转的路径改为自己的.w的地址啊
第三方集成的时候用.j的url,不是是用.w的url
bsessionid.png
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

32

主题

93

帖子

193

积分

初级会员

Rank: 2

积分
193
QQ
 楼主| 发表于 2018-1-18 10:47:42 | 显示全部楼层
jishuang 发表于 2018-1-18 10:28
4楼的链接看了吗?
在你的.w中拼接上bsessionid,不需要拼接username和password
然后把跳转的路径改为自己 ...

管理是否能给出电话沟通一下,我这边有很多疑问,感觉用文字描述不清楚!或者可以你联系下我,我的电话就是用户名
回复 支持 反对

使用道具 举报

32

主题

93

帖子

193

积分

初级会员

Rank: 2

积分
193
QQ
 楼主| 发表于 2018-1-18 10:53:17 | 显示全部楼层
jishuang 发表于 2018-1-18 10:28
4楼的链接看了吗?
在你的.w中拼接上bsessionid,不需要拼接username和password
然后把跳转的路径改为自己 ...

我们3.7的文件跟你截图的文件不一样,我发给你看下:
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import com.justep.auth.client.AuthUtils;
import com.justep.biz.client.Action;
import com.justep.biz.client.ActionEngine;
import com.justep.biz.client.ActionResult;
import com.justep.biz.client.ActionUtils;
import com.justep.cache.SystemCache;
import com.justep.message.ClientMessages;
import com.justep.ui.JProcessor;
import com.justep.ui.system.service.permission.ClassicPortalRequestWrapper;
import com.justep.ui.system.service.portal.LoginAction;
import com.justep.ui.util.UIUtils;


public class Login implements JProcessor {
       
        static Boolean useCache = false; //!SystemUtils.isDebug(); 权限变了缓存没清有问题

        public void execute(HttpServletRequest request, HttpServletResponse response)
                        throws ServletException, IOException {

                //hcr 支持oauth登录
                        AuthUtils.loginAuthServer(response);
               
                String bsessionid = null;
                String sysCode = null;
                String orgVersion = null;
                Cookie[] cookies = request.getCookies();
                if (cookies != null){
                        for (int i = 0; i < cookies.length; i++) {
                          String name = cookies.getName();
                          if(name.equals("bsessionid")){
                                  bsessionid = cookies.getValue();
                          }
                        }
                }
               
                if(bsessionid == null){
                        ActionResult result = LoginAction.execute(request);
                        if(result.isSuccess()){
                                bsessionid = result.getBSessionID();
                                sysCode = result.getSysCode();
                               
                                //get orgVersion
                                List<Object> datas = result.getDatas();
                                JSONObject resultParam = (JSONObject)datas.get(0);
                                @SuppressWarnings("rawtypes")
                                List values = (List)resultParam.get("value");
                                orgVersion = (String)values.get(values.size()-1);                               
                        }else{
                                JSONObject content = null;
                                String code = result.getCode();
                                if(ClientMessages.CON_ERROR1.equals(code)||ClientMessages.ACTION_ERROR1.equals(code)){
                                        content = new JSONObject();
                                        content.put("flag", false);
                                        content.put("message", result.getMessage());
                                }else{
                                        content = (JSONObject)result.getContent();
                                }
                                response.setCharacterEncoding("UTF-8");
                                response.setContentType(ActionUtils.JSON_CONTENT_TYPE);
                                OutputStream output = response.getOutputStream();
                                output.write(content.toString().getBytes("UTF-8"));
                                output.flush();
                                output.close();
                                return;
                        }
                }       

                //伪装参数, 获取上下文信息
                String useName = request.getParameter("username");
                String executor = request.getParameter("executor");
                JSONObject data;
                JSONObject context;
               
                if(useName==null || !useCache || !SystemCache.cache.containsKey(useName)){
                        Map<String, String> params = new HashMap<String, String>();
                        params.put("process", "/SA/OPM/system/systemProcess");
                        params.put("activity", "mainActivity");
                        params.put("$functionTree", "true");
                        params.put("$widgetList", "true");
                        if(executor != null)
                                params.put("executor", executor);
                        else       
                                params.put("$agentList", "true");
                        params.put("bsessionid", bsessionid);
                        context = (JSONObject)UIUtils.getWindowContext(new ClassicPortalRequestWrapper(request, params), null, false);
                        if(context.getBoolean("flag")){
                                data = (JSONObject)context.get("data");
                        }else{
                                response.setCharacterEncoding("UTF-8");
                                response.setContentType(ActionUtils.JSON_CONTENT_TYPE);
                                OutputStream output = response.getOutputStream();
                                output.write(context.toString().getBytes("UTF-8"));
                                output.flush();
                                output.close();
                                return;
                        }
                       
                        //取系统注入代码
                        context.put("sys", sysCode);
                        context.put("bsessionid", bsessionid);
                        //不能缓存
                        data.put("bsessionid", bsessionid);
                        JSONObject pid = (JSONObject)data.get("bizParams");
                        pid = (JSONObject)pid.get("value");
                        String personID =        (String)pid.get("currentPersonID");
                        data.put("layout", this.getLayout(personID, bsessionid));
                        data.put("orgVersion", orgVersion);               
                       
                        response.setCharacterEncoding("UTF-8");
                        response.setContentType(ActionUtils.JSON_CONTENT_TYPE);
                        PrintWriter out = response.getWriter();
                        out.write(context.toString());
                        out.flush();
                       
                        if(useCache && (useName != null)){
                                context.put("sys", "__sysCode__");
                                context.put("bsessionid", "__bsessionid__");
                                data.put("bsessionid", "__bsessionid__");
                                data.put("orgVersion", "__orgVersion__");               
                                String ctx = context.toJSONString();
                                SystemCache.cache.put(useName, ctx);
                        }
                       
                }else{
                        String ctx = SystemCache.cache.get(useName);

                        ctx = ctx.replace("__bsessionid__", bsessionid);
                        if(sysCode != null){
                                ctx = ctx.replace("__sysCode__", sysCode);
                        }else{
                                ctx = ctx.replace("__sysCode__", "");
                        }
                        if(orgVersion != null){
                                ctx = ctx.replace("__orgVersion__", orgVersion);
                        }else{
                                ctx = ctx.replace("__orgVersion__", "");
                        }

                        response.setCharacterEncoding("UTF-8");
                        response.setContentType(ActionUtils.JSON_CONTENT_TYPE);
                        PrintWriter out = response.getWriter();
                        out.write(ctx);
                        out.flush();
                }
        }
        private JSONObject getLayout(String useName, String bsessionID) throws JSONException{

                Action layoutAction = new Action();
                layoutAction.setProcess("/portal2/process/portal/portalProcess");
                layoutAction.setActivity("index");
                layoutAction.setName("selectPortal3ProfilesAction");
                layoutAction.setParameter("personID", useName);
                ActionResult result = ActionEngine.invokeAction(layoutAction, ActionUtils.JSON_CONTENT_TYPE, bsessionID, null, null);
               
                JSONObject temp = (JSONObject)result.getContent();
                temp = (JSONObject)temp.get("data");
                temp = (JSONObject)temp.get("value");
               
                String[] relations = new String[]{"sFunctree", "sPortal", "sOther"};
                for(String rel : relations){
                        Object s = temp.get(rel);
                        if( (s instanceof String && ((String)s).equals(""))) //s == JSONObject.NULL ||
                                s = "{}";
                        temp.remove(rel);
                        temp.put(rel.substring(1).toLowerCase(), JSON.parse((String)s));
                }
               
                return temp;
        }

}


回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2025-7-4 04:12 , Processed in 0.061042 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表