盈帆报表-第三方接口接入方式(报表工具)第三方接口 一、跳过登陆界面直接登陆直接使用下面请求方式,即可跳过登陆界面,直接登陆到相应的用户界面中。 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("日期参数", 下图显示的是通过上述方式,返回的界面。
说明: “http:// 127.0.0.1:8099/r_report;”是服务器指定的报表目录。 “<%=global_session_id%>”是获取的sessionid。 “?file=<%=URLEncoder.encode("日期参数", "UTF-8")%>”实际模板“日期参数”UTF8编码后的链接文本。 “¶m=<%=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.jsp与menu.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")%>¶ms=<%=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¶ms=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编码后的链接文本。 “¶m=<%=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例子程序。 |