1 概述
需求:
由于SmartBI不限制用户登陆移动设备的数量,客户需要限制一个用户最多只能够登陆不超过三台手机或者Pad设备。
实现方案:
产品已经有 “移动设备管理“功能,只是产品的移动设备管理要么是手动要么是自动审核。这个插件使得用户接入的第一台设备自动审核,后面接入的设备手动审核。
为实现该功能需要重写IPadPortalModule.java,在Spring上重新注册相同key的module到RMIModule,module的注册请见自定义Module。
2 编写修改代码
重写IPadPortalModule.java
/** * @param ipadId 登录设备的ID,与登录用户无关 * @return 最后执行的Access操作的字符串表示 */ public String canAccessIPadModule(String ipadId) { RegisterInfo info = IPadDAOFactory.getRegisterInfoDAO().load(ipadId); // 若该设备为新设备,info为null // 此时没有任何用户通过该设备登录 if (info == null) { // 获取所有注册信息 List<RegisterInfo> rInfos = IPadDAOFactory.getRegisterInfoDAO().getAllRegisters(); if (rInfos != null) { // flag用于统计当前用户等入的设备数 int flag = 0; for (int i = 0; i < rInfos.size(); i++) { String rUser = rInfos.get(i).getRequestUser(); IUser user = IPadPortalModule.getInstance().getStateModule().getCurrentUser(); String cUser = user.getName(); if (!StringUtil.isNullOrEmpty(user.getAlias())) { cUser += "(" + user.getAlias() + ")"; } if (rUser.equals(cUser)) { flag++; } } LOG.info("flag:" + flag); // 该用户之前曾经在其他移动设备上登录,且设备数不超过3,允许登录 if (flag > 0 && flag < 3) { return "requireRegister"; } // 该用户在超过3台移动设备上登录,用户数超出限制注册失败 if (flag >= 3) { return StringUtil.getLanguageValue("Ipad_Register_Error", CommonConfiguration.getInstance().getLocale()); } // 该用户之前没有在移动设备上登录,自动审核通过 if (flag == 0) { IPadDAOFactory.getRegisterInfoDAO().register(ipadId); return super.canAccessIPadModule(ipadId); } } else { // 自动审核通过 IPadDAOFactory.getRegisterInfoDAO().register(ipadId); return super.canAccessIPadModule(ipadId); } } else { // 该设备已经登录(该状态登录用户无关) IUser user = IPadPortalModule.getInstance().getStateModule().getCurrentUser(); String name = user.getName(); if (!StringUtil.isNullOrEmpty(user.getAlias())) { name += "(" + user.getAlias() + ")"; } String rName = info.getRequestUser(); if (name.equals(rName)) { switch (info.getStatus()) { case ACCEPTED: case AUTO_ACCEPTED: return "true"; case REJECTED: return "reject"; case REQUEST: return "request"; } return "faild"; } else { return "faild"; } } return "faild"; }
3 相关资源
该示例插件主要包含两个功能:
- 限制同一个用户登录设备数最多为3
最大设备数写死在代码中,可以参考第三课:新增系统选项,创建一个修改该值的选项
该插件只会限制通过移动端APP登录的用户,而不会限制通过移动端网页版登录的用户 - 限制外网通过Web访问报表系统;
示例依赖了移动端扩展包ipad.ext,需要加载该扩展包,企业套件版已自带该扩展包。
示例代码:TKRSExample.zip
该示例代码来源于实际项目(EPPR-8003),下面为基于V6的原始代码,在V7上已经不能正常工作。修正版本见上方附件。