让数据成为企业发展的驱动力
搜索

盈帆报表-第三方接口接入方式(报表工具)

第三方接口


一、跳过登陆界面直接登陆

直接使用下面请求方式,即可跳过登陆界面,直接登陆到相应的用户界面中。

http://127.0.0.1:8099/loginWithoutPage?account=demo&password=123


说明:

account是登陆的账号password是相应用户的密码


二、获取用户sessionid进行操作

获取sessionid

以JAVA为例:

public String getAuth() throws Exception {

      String sessionid = null;

      // 1、创建HttpClient

      CloseableHttpClient client = HttpClients.createDefault();

      // 2、封装请求参数

      List<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>(2);

  //demo是实际的用户名称

      list.add(new BasicNameValuePair("command", "demo"));

  //使用对称加密,”123”是账号“demo”的实际密码,"123456789ABCDEFG"是对称加密的KEY值。KEY"123456789ABCDEFG"必须是16位的,此KEY需要与webapps\ROOT\WEB-INF\classes\ application.properties文件里的AES.KEY一致

      list.add(new BasicNameValuePair("certificate", AES.encrypt("123", "123456789ABCDEFG")));

      // 3、转化参数

      UrlEncodedFormEntity refe = new UrlEncodedFormEntity(list, "UTF-8");

      // 4、创建HttpPost

      HttpPost post = new HttpPost("http://127.0.0.1:8099/authentication");

      post.setHeader("Accept", "text/plain;charset=UTF-8");

      // 5、设置参数

      post.setEntity(refe);

      // 6、执行请求

      CloseableHttpResponse resp = client.execute(post);

      // 7、获取实体

      HttpEntity entity = resp.getEntity();

      // 8、获取返回实体内数据

      String result = EntityUtils.toString(entity, "UTF-8");

      if ("OK".equals(result)) {

          Header[] headers = resp.getHeaders("Set-Cookie");

          String str = headers[0].getValue();

          sessionid = str.substring(0, str.indexOf(";"));

      }

      // 9、关闭

      resp.close();


      return sessionid;

  }


获取报表菜单树结构

"http:// 127.0.0.1:8099/r_menu;<%=global_session_id%>"


说明:

http:// 127.0.0.1:8099/r_ menu;”是服务器指定的菜单目录。

<%=global_session_id%>是获取的sessionid


下图显示的是通过上述方式,返回的数据界面,用户报表菜单树的JSON格式。    


JSON格式说明:

“path”:是当前模板的实际模板路径名称。

“name”:是模板在菜单中显示的名称。

“id”:是当前模板在数据库中的实际id

获取报表区域

通过获取的sessionid,模板名称,参数获取当前用户可预览的报表。具体步骤如下:


//获取第一步的sessionid

String global_session_id = getAuth();

//实际请求

"http:// 127.0.0.1:8099/r_report;<%=global_session_id%>?file=<%=URLEncoder.encode("日期参数",
"UTF-8")%>&params=<%=URLEncoder.encode("param1=2016-1-10;param2=2018-05-01",
"UTF-8")%>"


下图显示的是通过上述方式,返回的界面

    


说明:

http:// 127.0.0.1:8099/r_report;”是服务器指定的报表目录。

<%=global_session_id%>是获取的sessionid

?file=<%=URLEncoder.encode("日期参数", "UTF-8")%>实际模板日期参数UTF8编码后的链接文本。

&param=<%=URLEncoder.encode("param1=361", "UTF-8")%>”实际的模板参数。 <%=URLEncoder.encode("param1=2016-1-10;param2=2018-05-01", "UTF-8")%>参数值可不填写。 param1=2016-1-10;param2=2018-05-01实际的模板用到的参数。


注意事项:

如果是有参数的报表模板,调用时没有写参数,访问的实际地址是带有参数控件的页面

具体请参照efreport-integration-demo/index.jspmenu.jsp例子程序。例子程序只是提供接口使用的方式,不能直接使用此例子。如需直接看效果,请将efreport-integration-demo目录下的内容拷贝到其他tomcat项目中,并修改其JSP中的服务器地址端口再启动。


三、无权限直接访问

获取公钥

使用http请求获取公钥

http://127.0.0.1:8099/thirdSys/getPublic

获取的公钥如下:

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDmVtO9QRTBBVUzDzhtSU9aVjv46dlQUiMGZRt9uz0h/T1Ty6X2nF1on0EG7fUgg3yU+XepD/AQlZFzLtpuI7TPhA67CoecmhRhCdUHN4u6FOGhQjyNl9PPL1gYF4YwW94BX5HPKg1nOdpmkkB/pdJ5cpobjYD0R0xgelmG1nkRWQIDAQAB


说明:

重启tomcat后,公钥随机生成,每次重启后,请重新获取。


获取token

获取当前计算机时间GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数,使用RSA算法,获取token


  public String getToken() throws Exception {

//获取当前的毫秒数

      String data = String.valueOf(System.currentTimeMillis());

  //通过时间与公钥,使用RSA算法获取token

      String encryptData = RsaUtils.encrypt(data,RsaUtils.getPublicKey("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDmVtO9QRTBBVUzDzhtSU9aVjv46dlQUiMGZRt9uz0h/T1Ty6X2nF1on0EG7fUgg3yU+XepD/AQlZFzLtpuI7TPhA67CoecmhRhCdUHN4u6FOGhQjyNl9PPL1gYF4YwW94BX5HPKg1nOdpmkkB/pdJ5cpobjYD0R0xgelmG1nkRWQIDAQAB"));

 

      return encryptData;

  }



获取报表区域

通过获取的token,模板名称,参数获取当前用户可预览的报表。


实际http请求如下:

http://127.0.0.1:8099/report/checkSheet?file=<%=URLEncoder.encode("日期参数","UTF-8")%>&params=<%=URLEncoder.encode("param1=2016-1-10;param2=2018-05-01","UTF-8")%>&token=<%=getToken()%>


下图显示的是通过上述方式,获取实际的http请求,返回的界面。

http://127.0.0.1:8099/report/checkSheet?file=%E6%97%A5%E6%9C%9F%E5%8F%82%E6%95%B0&params=param1%3D2016-1-10%3Bparam2%3D2018-05-01&token=JyraKnXWLabFB/5FYL13wJVhWBjcyAPkgtDySdcZ3xJHqKm7lekK0rbDw7WZ3ISUTcvAIaD4PJX9ynaFX8RDThU8gWow12uiBgmiC49iv2dIByd7vHMR/ml2YChEXs5wc5pxL+1iWxcFlybgX8szjfV0lxlDsa3hwJiLReVbkys=

    


说明:

http://127.0.0.1:8099/report/checkSheet”是服务器指定的报表目录。

?file=<%=URLEncoder.encode("日期参数", "UTF-8")%>实际模板“日期参数”UTF8编码后的链接文本。

&param=<%=URLEncoder.encode("param1=361", "UTF-8")%>”实际的模板参数。 <%=URLEncoder.encode("param1=2016-1-10;param2=2018-05-01", "UTF-8")%>参数值可不填写。 param1=2016-1-10;param2=2018-05-01实际的模板用到的参数。

&token=<%=getToken()%>实际获取到的token


注意事项:

最终获取的http请求页面时效默认是1分钟,1分钟过后此连接时效需要重新获取token进行http请求

具体请参照efreport-integration-demo/ token.jsp例子程序。