回到主页
回到主页

报表与用户集成

· 厦门艾科思报表平台系统管理

可以将已经做好的报表集成到第三方系统中,报表是H5的,所以只需要在第三方系统中通过iframe嵌入报表链接即可.

艾科思移动报表平台提供了以下报表集成方式:

【一、用户名密码参数集成】

通过将用户名和密码作为参数放入报表链接中,实现即时登录和权限控制。

 

  1. 在报表设计器中,预览报表,获得报表的访问链接,例如:

    https://enterprise.ireport365.com/view/report.do?reportId=98062e02a4294eda86423f464485089e

  2. 在报表的访问链接中加入用户名及密码参数,例如:

    https://enterprise.ireport365.com/view/report.do?reportId=98062e02a4294eda86423f464485089e&username=demo&password=123456

参数列表如下:

参数名含义
username      用户的登录名    
password      用户的登录密码,明文
md5password      用户的登录密码,使用md5加密的密文

注:password和md5password只需提供其中一个即可

【二、用户名密码安全访问集成】

使用Api生成包含动态加密的用户名、密码的报表url,url过期时间为10分钟,大大提升系统安全性

  1. 创建授权应用,参考:应用授权
  2. 下载Api源码:(API_v1已废弃)
    iReport365Api.java
  3. 替换Api源码中的以下参数:

    Api源码参数

    描述

    host替换成相应的报表服务器地址,包含http,不能以 / 结尾appId授权应用的appIdappSecret授权应用的安全码
  4. 参考Api源码中:

    用户名密码作为密文参数生成报表URL

【三、AccessToken安全访问集成】

向报表服务器获得accessToken(访问码),通过Api生成包含加密认证的报表url,url过期时间为10分钟,大大提升系统安全性

  1. 创建授权应用,参考:应用授权
  2. 下载Api源码:(API_v1已废弃)
    iReport365Api.java
  3. 替换Api源码中的以下参数:

    Api源码参数

    描述

    host替换成相应的报表服务器地址,包含http,不能以 / 结尾appId授权应用的appIdappSecret授权应用的安全码
  4. 参考Api源码中:
    使用AccessToken作为参数生成报表列表的URL
【与第三方用户系统集成】

如果需要与现有的用户系统集成,用户无需管理新的密码,可以启用iReport365报表平台的用户登录脚本,当用户登录时,执行管理员设定的脚本,比如使用SQL或WebService验证用户输入的密码。

  1. 平台管理-》系统设置-》用户登录脚本-》开启
  2. 设置用户登录脚本 (页面底部有脚本示例)

    脚本中支持的内置参数:

参数名描述
result返回值对象
databaseService数据库操作对象
webServiceHTTP请求操作对象
ldapServiceLDAP操作对象
userService用户操作对象
redisServiceRedis操作对象
reportService报表操作对象
wxcpService微信企业号操作对象
sessionServiceSession操作对象
request用户的请求
outSystem.out
loggerLogger操作对象

result返回值对象属性

属性名描述
success验证是否成功
message错误消息
context上下文
useStandardVerification是否使用系统用户库验证用户,如果该属性设置为true,
则无论脚本验证结果如何,都是用系统用户库验证

databaseService对象方法

Section image

webService对象方法

Section image

userService对象方法

Section image

sessionService对象方法

Section image

ldapService对象方法

Section image

wxcpService对象方法

Section image

将微信企业号用户加入指定的标签

var wxConfigId = "abc"; //配置ID,报表平台->微信企业号->编辑->ID

var wxTagName = "标签名称"; //微信企业号中的标签名称

var usernames = JSONArray();

usernames.add("username1"); //报表平台用户名

usernames.add("username2"); //报表平台用户名

wxcpService.addUserToTag(wxConfigId, wxTagName, usernames);

redisService对象方法

Section image

从Redis集群中取值

var redisKey = "theKey";

var redisAddrs = new ArrayList();

redisAddrs.add("192.168.1.2:7000");

redisAddrs.add("192.168.1.3:7001");

redisAddrs.add("192.168.1.4:7002");

var theValue = redisService.clusterGet(redisAddrs, redisKey);

脚本示例:

数据库验证用户名密码

importPackage(java.util);

importPackage(org.apache.commons.codec.digest);

//获取用户登录时填写的用户名和密码

var username=request.getParameter("username");

var password=request.getParameter("password");

//将密码MD5加密

var md5Password = DigestUtils.md5Hex(password);

//用户库的连接名称

var connectionName = "local dataset";

var param = new ArrayList();

param.add(username);

param.add(md5Password);

//查询用户库

var sql = "select username,password from users where username=? and password=?";

var data = databaseService.query(connectionName, sql, param);

if(data.size() === 0){

result.setSuccess(false);

result.setMessage("用户名或密码错误");

}else{

result.setSuccess(true);

}

LDAP用户认证

importPackage(java.util);

importPackage(org.apache.commons.codec.digest);

//获取用户登录时填写的用户名和密码

var username=request.getParameter("username");

var password=request.getParameter("password");

//LDAP查询

var host = "127.0.0.1";//LDAP主机地址

var port = "389"; //LDAP端口

var type = "simple"; //不用修改

var domain = "abc.com"; //域

var success = ldapService.auth(host,port,type,domain,username,password);

if(success){

result.setSuccess(true);

}else{

result.setSuccess(false);

result.setMessage("用户名或密码错误");

}

WebService用户认证脚本

importPackage(java.util);

importPackage(org.apache.commons.codec.digest);

importPackage(com.alibaba.fastjson);

importPackage(org.apache.commons.lang);

//获取用户登录时填写的用户名和密码

var username=request.getParameter("username");

var password=request.getParameter("password");

var str = webService.get("http://127.0.0.1:8080/login?username="+username+"&password="+password);

if(!StringUtils.isEmpty(str)){

var json = JSONObject.parseObject(str);

var success = json.getBoolean("success");

if(!success){

result.setSuccess(false);

result.setMessage("用户名或密码错误");

}else{

result.setSuccess(true);

}

}else{

result.setSuccess(false);

result.setMessage("用户名或密码错误");

}

全局数据权限脚本

全局数据权限脚本

importPackage(java.util);

importPackage(com.alibaba.fastjson);

importPackage(org.apache.commons.lang);

var dataPermissionData = new HashMap();

//获取报表URL传入的参数

var accessToken=request.getParameter("accessToken");

var appSecret="some code";

var url = "http://www.abc.com/shopguide/api/org/getOrgWithinAuth?appSecret="+appSecret+"&accessToken="+accessToken;

logger.debug("ur: "+url);

//调用接口,获取相关权限

var response = webService.get(url);

logger.debug("response: "+response);

if(!StringUtils.isEmpty(response)){

//拼接权限数据

var json = JSONObject.parseObject(response);

var message = json.getString("msg");

logger.debug("message: "+message);

if(StringUtils.equals(message, "success")){

var values = json.getJSONArray("value");

logger.debug("values: "+values);

if(values != null){

var codeArr = new ArrayList();

for(var m = 0; m < values.size(); m++){

var item = values.getJSONObject(m);

var code = item.getString("code");

codeArr.add(code);

}

//生成SHOPCODE的权限数据

dataPermissionData.put("SHOPCODE", codeArr);

}

}

}

result.setSuccess(true);

result.setData(dataPermissionData);

logger.debug("dataPermissionData: "+dataPermissionData);

上一篇
OAuth SSO单点登录集成
下一篇
更新报表服务器 - Linux系统
 回到主页
strikingly icon上线了提供技术支持
Cookie的使用
我们使用cookie来改善浏览体验、保证安全性和数据收集。一旦点击接受,就表示你接受这些用于广告和分析的cookie。你可以随时更改你的cookie设置。 了解更多
全部接受
设置
全部拒绝
Cookie设置
这些cookies支持诸如安全性、网络管理和可访问性等核心功能。这些cookies无法关闭。
这些cookies帮助我们更好地了解访问者与我们网站的互动情况,并帮助我们发现错误。
这些cookies允许网站记住你的选择,以提供更好的功能和个性化支持。
保存