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

QQ登录

只需一步,快速开始

查看: 5733|回复: 14

[结贴] 无密码登录,登录系统后才能执行 biz action 请求

[复制链接]

179

主题

709

帖子

2090

积分

金牌会员

QQ:1262363236

Rank: 6Rank: 6

积分
2090
QQ
发表于 2019-7-18 10:52:02 | 显示全部楼层 |阅读模式
扩展了系统的登录login.J文件,改:将下面的   QQ截图20190718105005.png   改为了无密码的登录方法,其他的都不变;但是启动服务器,清除浏览器缓存后,第一次登录成功跳转到首页出来了,然后都会出现登录系统后才能执行 biz action 请求;
第二次以后又都是好的了,不会再出现了,但是启动服务器,清除浏览器缓存后有出现,这个怎么解决呢??


具体代码如下:

        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);----系统有密码登录

                        // ==gf--无密码登录---2019年7月16日11:47:15==start=============
                        String fPhone = request.getParameter("fPhone");
                        String username = request.getParameter("username");
                        String password = request.getParameter("password");

                        int cuser = checkUser(fPhone, password);// 再次检查会员名称和密码是否对应
                        if (cuser == 0) {
                                throw new RuntimeException("手机号或密码错误,请重试");
                        }

                        String ip = request.getRemoteAddr();
                        String language = "zh_CN";
                        Date loginDate = new Date(System.currentTimeMillis());

                        // 调用ntLoginAction不用密码登录
                        Action action = new Action();
                        action.setProcess("/SA/OPM/system/systemProcess");
                        action.setActivity("mainActivity");
                        action.setName("ntLoginAction");
                        action.setParameter("name", username);
                        action.setParameter("loginDate", new java.sql.Date(System.currentTimeMillis()));
                        action.setParameter("ip", "127.0.0.1");
                        action.setParameter("options", new HashMap<String, Object>());
                        action.setParameter("lang", language);
                        ActionResult result = ActionEngine.invokeActions(JustepConfig.getBusinessServer() + "/login2", null, action.asXML().getBytes("UTF-8"), null, ActionUtils.JSON_CONTENT_TYPE,
                                        ActionUtils.XML_CONTENT_TYPE, null, language, "post", null);

                        // ==gf--无密码登录---2019年7月16日11:47:15==end=============

                        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();
                }
        }


QQ:1262363236

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36071
发表于 2019-7-18 13:23:00 | 显示全部楼层
如果是平台默认的不需要密码登录,只需要修改/BIZ/system/logic/code/dsrc/OPMProcedure.java中
  1.         public static Object login(String name, Date loginDate, String pwd, String lang, String ip, Map<Object, Object> options) {
  2.                 return OPMProcedure.login(name, loginDate, pwd, lang, true, ip, options);
  3.         }
复制代码




  1.         public static Object login(String name, Date loginDate, String pwd, String lang, String ip, Map<Object, Object> options) {
  2.                 return OPMProcedure.login(name, loginDate, pwd, lang, false, ip, options);
  3.         }
复制代码
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



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

使用道具 举报

179

主题

709

帖子

2090

积分

金牌会员

QQ:1262363236

Rank: 6Rank: 6

积分
2090
QQ
 楼主| 发表于 2019-7-18 14:19:49 | 显示全部楼层
jishuang 发表于 2019-7-18 13:23
如果是平台默认的不需要密码登录,只需要修改/BIZ/system/logic/code/dsrc/OPMProcedure.java中

这个会影响原来的登录方式,我们需要不影响原来的登录
QQ:1262363236
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36071
发表于 2019-7-18 15:22:16 | 显示全部楼层
如果是第三方集成不需要密码参考http://docs.wex5.com/bex5-ui-question-list-10321/
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



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

使用道具 举报

179

主题

709

帖子

2090

积分

金牌会员

QQ:1262363236

Rank: 6Rank: 6

积分
2090
QQ
 楼主| 发表于 2019-7-18 15:41:24 | 显示全部楼层
jishuang 发表于 2019-7-18 15:22
如果是第三方集成不需要密码参考http://docs.wex5.com/bex5-ui-question-list-10321/

1楼的就是参考了这个写的,第一次就会出现:登录系统后才能执行 biz action 请求
QQ:1262363236
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36071
发表于 2019-7-18 17:06:30 | 显示全部楼层
直接用链接中的代码也有问题?
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



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

使用道具 举报

179

主题

709

帖子

2090

积分

金牌会员

QQ:1262363236

Rank: 6Rank: 6

积分
2090
QQ
 楼主| 发表于 2019-7-18 17:13:13 | 显示全部楼层
jishuang 发表于 2019-7-18 17:06
直接用链接中的代码也有问题?

如果直接全部替换掉login里的代码就会报错,只是取了  Action action = new Action();
                        action.setProcess("/SA/OPM/system/systemProcess");
                        action.setActivity("mainActivity");
                        action.setName("ntLoginAction");
                        action.setParameter("name", username);
                        action.setParameter("loginDate", new java.sql.Date(System.currentTimeMillis()));
                        action.setParameter("ip", "127.0.0.1");
                        action.setParameter("options", new HashMap<String, Object>());
                        action.setParameter("lang", language);
                        ActionResult result = ActionEngine.invokeActions(JustepConfig.getBusinessServer() + "/login2", null, action.asXML().getBytes("UTF-8"), null, ActionUtils.JSON_CONTENT_TYPE,
                                        ActionUtils.XML_CONTENT_TYPE, null, language, "post", null);

就会出现一楼的情况
QQ:1262363236
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36071
发表于 2019-7-18 17:39:19 | 显示全部楼层
具体的需求要做什么?
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



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

使用道具 举报

179

主题

709

帖子

2090

积分

金牌会员

QQ:1262363236

Rank: 6Rank: 6

积分
2090
QQ
 楼主| 发表于 2019-7-18 17:43:15 | 显示全部楼层
jishuang 发表于 2019-7-18 17:39
具体的需求要做什么?

另外做个登录页面,查询会员表验证是否通过,如果通过则返回会员code,如果是多个code则选择一个调用扩展的login.J进行无密码登录
QQ:1262363236
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36071
发表于 2019-7-19 08:38:01 | 显示全部楼层
那就直接调用我发的那个login.j去登录啊
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-30 09:40 , Processed in 0.134185 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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