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

QQ登录

只需一步,快速开始

查看: 5299|回复: 6

[分享] BeX5提供注册功能

  [复制链接]

63

主题

332

帖子

732

积分

高级会员

Rank: 4

积分
732
QQ
发表于 2017-9-28 11:03:04 | 显示全部楼层 |阅读模式
版本: 小版本号:
数据库: 服务器操作系统: 应用服务器:
客户端操作系统: 浏览器:
目前的x5是默认没有提供注册功能的,需要在组织管理中添加人员,分配角色。但是目前公司需要让一些流动人员自己创建帐号,就需要提供注册功能,注册人填完信息注册成功后自动获得一个指定的角色,并可以发起流程。在 @jishuang 的帮助下终于完成了这个任务,中间也走了不少坑,现在把心得分享一下,希望以后的人可以少走一些弯路。

参考的帖子:  http://bbs.wex5.com/forum.php?mod=viewthread&tid=51290
QQ : 447220653
与大家一起学习

63

主题

332

帖子

732

积分

高级会员

Rank: 4

积分
732
QQ
 楼主| 发表于 2017-9-28 11:05:46 | 显示全部楼层
首先是在登录页中加上注册的按钮,没什么好说的,
手机登录页地址: UI2/portal/mobile/login/login.w

web登录页地址: UI2/portal/pc3/login/login.w

改一下页面样式就可以了,建议使用contents组件,点击注册按钮后切换一个content到你的注册页面上去

QQ : 447220653
与大家一起学习
回复 支持 反对

使用道具 举报

63

主题

332

帖子

732

积分

高级会员

Rank: 4

积分
732
QQ
 楼主| 发表于 2017-9-28 11:10:32 | 显示全部楼层
注册的思路大致如下:
用一个已经创建好的帐号进行模拟登录,登录成功后调用注册人员action,注册完成后把之前模拟登录的用户注销掉以防止占用在线人数。

首先是js调用.j文件,把注册页面采集的注册信息传到后台servlet中

  1.                        
  2.                         var X5_LOGIN_URL = "/x5/UI2/portal/mobile/login/login.j";   // 模拟登录.j文件的url
  3.                         $.ajax({
  4.                                 async : false,
  5.                                 type : "get",
  6.                                 dataType : "json",
  7.                                 url : X5_LOGIN_URL,
  8.                                 data : {
  9.                                         username_s : username.val(),
  10.                                         password_s : md5.hex_md5(password.val()),
  11.                                         uname_s : uname.val()
  12.                                 },
  13.                                 contentType : "application/x-www-form-urlencoded; charset=utf-8", //这句一定要有,否则.j文件会获取不到值
  14.                                 error : function(error, status, text) {
  15.                                         alert("注册失败");
  16.                                 },
  17.                                 success : function(result) {
  18.                                         alert("注册成功");
  19.                                 }
  20.                         });
复制代码
QQ : 447220653
与大家一起学习
回复 支持 反对

使用道具 举报

63

主题

332

帖子

732

积分

高级会员

Rank: 4

积分
732
QQ
 楼主| 发表于 2017-9-28 11:13:01 | 显示全部楼层
本帖最后由 liufanx5 于 2017-9-28 11:17 编辑

然后是.j文件进行模拟登录,登陆成功后调用注册人员的action


  1.         public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  2.                 System.out.println(111);
  3.                 JSONObject content = null;
  4.                 String bsessionid = request.getParameter("bsessionid");
  5.                 ActionResult checkResult = ActionEngine.checkSession(bsessionid, ActionUtils.JSON_CONTENT_TYPE);
  6.                 if (checkResult.isSessionTimeOut()) {
  7.                         String username = "bllogin"; // request.getParameter("username");  // 模拟登录用户的帐号密码,必须之前在数据库中有才行
  8.                         String password = "E10ADC3949BA59ABBE56E057F20F883E";          // 这里是md5加密后的密码
  9.                         String ip = request.getRemoteAddr();
  10.                         String language = "zh_CN";
  11.                         Date loginDate = new Date(System.currentTimeMillis());
  12.                         ActionResult actionResult = ActionEngine.login2(username, password, ip, language, loginDate, null, ActionUtils.JSON_CONTENT_TYPE, null);
  13.                         content = (JSONObject) actionResult.getContent();
  14.                         bsessionid = actionResult.getBSessionID();

  15.                         System.out.println(bsessionid);

  16.                         String username1 = request.getParameter("username_s");
  17.                         String uname1 = request.getParameter("uname_s");
  18.                         String password1 = request.getParameter("password_s");
  19.                         
  20.                         try {
  21.                                 newPerson(username1, uname1, password1, request, response, bsessionid, language);    // 这里是调用新建人员的方法
  22.                         } catch (Exception e) {
  23.                                 e.printStackTrace();
  24.                         }

  25.                 } else {
  26.                         content = (JSONObject) checkResult.getContent();
  27.                 }

  28.                 content.put("bsessionid", bsessionid);

  29.                 String json = content.toString();
  30.                 if (request.getParameter("x5callback") != null) {
  31.                         json = String.format("%s(%s)", request.getParameter("x5callback"), json);
  32.                 }

  33.                 response.setCharacterEncoding("UTF-8");
  34.                 response.addHeader("Access-Control-Allow-Origin", "*");
  35.                 response.setContentType(ActionUtils.JSON_CONTENT_TYPE);
  36.                 response.getWriter().write(json);
  37.                 response.flushBuffer();
  38.         }
复制代码
QQ : 447220653
与大家一起学习
回复 支持 反对

使用道具 举报

63

主题

332

帖子

732

积分

高级会员

Rank: 4

积分
732
QQ
 楼主| 发表于 2017-9-28 11:15:13 | 显示全部楼层
本帖最后由 liufanx5 于 2017-9-28 11:16 编辑

.j文件中新增人员的方法,这里面调用新增人员action

  1.         public void newPerson(String username, String uname, String password, HttpServletRequest request, HttpServletResponse response, String bsessionid, String language) throws Exception {
  2.                 Action action = new Action();
  3.                 action.setProcess("/WLW/IOT/process/userRegister/userRegisterProcess"); //新增人员action的地址
  4.                 action.setActivity("mainActivity");
  5.                 action.setName("newPerson");
  6.                 System.out.println(username + "|||" + password + "|||" + uname);
  7.                 action.setParameter("username", username);
  8.                 action.setParameter("password", password);
  9.                 action.setParameter("uname", uname);
  10.                 ActionResult ar = ActionEngine.invokeAction(action, ActionUtils.JSON_CONTENT_TYPE, bsessionid, language, null);
  11.                 JSONObject obj = (JSONObject) ar.getContent();
  12.                 try {
  13.                         JSONObject data = obj.getJSONObject("data");
  14.                         System.out.println(data.get("value"));// 要获取action返回的值
  15.                         if(data.get("value") != null){
  16.                                 ActionResult result = ActionEngine.logout(bsessionid, ActionUtils.JSON_CONTENT_TYPE);   // 这句是在新增人员后把模拟登录用户注销
  17.                         }
  18.                 } catch (JSONException e) {
  19.                         e.printStackTrace();
  20.                 }
  21.         }
复制代码

QQ : 447220653
与大家一起学习
回复 支持 反对

使用道具 举报

63

主题

332

帖子

732

积分

高级会员

Rank: 4

积分
732
QQ
 楼主| 发表于 2017-9-28 11:18:38 | 显示全部楼层
最后是新增人员的action,这个也没什么好说的,api上的方法,需要注意的就是这里的密码是md5加密之后的


  1.         // 注册功能新增人员
  2.         public static int newPerson(String username, String password, String uname) {
  3.                 try {
  4.                         String psnID = CommonUtils.createGUID().substring(0, 18);
  5.                         String orgID = ContextHelper.getPersonMember().getOrg().getID();
  6.                         Map exts = new HashMap();
  7.                         exts.put("sMail", "test@beiliang.com");
  8.                         PersonHelper.appendPerson(psnID, username, uname, username, password, null, null, "0L6xcxRiHlFvoQh5YDN", exts);
  9.                 } catch (Exception e) {
  10.                         System.out.println(e.getMessage());
  11.                         return 0;
  12.                 }

  13.                 return 1;
  14.         }
复制代码
QQ : 447220653
与大家一起学习
回复 支持 反对

使用道具 举报

63

主题

332

帖子

732

积分

高级会员

Rank: 4

积分
732
QQ
 楼主| 发表于 2017-9-28 11:21:25 | 显示全部楼层
代码不多,但是由于种种原因,卡了将近1天的时间,最后终于弄好了,web页面和手机app页面都可以进行注册,调用的方法完全一样,如果需要这个人员拥有什么角色和组织机构,需要在代码中另外加判断,比较简单,这里就不列举了。
QQ : 447220653
与大家一起学习
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 11:12 , Processed in 0.072491 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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