页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

...

在实际生产的过程中使用openresource.jsp集成资源的时候,除去会遇到Tomcat无法识别字符的问题之外,还可能或有参数过多请求头过长请求被拦截、请求中大量的特殊字符被网络安全策略拦截等各式各样的场景,那是否还有其他办法规避掉这些问题?

base64加密流程

(1)配置好需要加密的参数,这里以发回区域参数为例,如:[{"name":"发货区域", "value":"华北","displayValue":"华北"}]

...

  • 加密之后的base64串是可能包含除字母之后的一些特殊字符的,所以一定需要进行url转码,否则Smartbi在加解密的时候就会报错,前端页面显示500,如下图

base64参考示例

java代码实现参考:

代码块
languagejava
// 对格式化的json字符串sourceString使用UTF-8字符集进行加密
String targetTempString = new sun.misc.BASE64Encoder().encode(sourceString.getBytes(StandardCharsets.UTF_8));
// 对加密后的字符串进行url转码
String targetString = java.net.URLEncoder.encode(targetTempString);

...

代码块
languagexml
<div style="width:100%;height:100%;">
	<!-- 1、表单的响应区域 -->
    <iframe id="myFrame" width="100%" height="100%" allowTransparency name="myFrame" />
</div>

<!-- 2、表单部分,在表单中设置post请求提交的地址、参数、参数值等信息 -->
<form id="submitForm" method="post" action="http://localhost:18080/smartbi/vision/openresource.jsp" target="myFrame">
	<!-- 3、请求参数部分 -->
    <input  id="resid" type="text" name="resid" value="I402881e5019608c408c4fb7801960e2ec9b42d3d">
	<!-- 3.1、设置集成资源的参数信息 -->
    <!-- 方式1 -->
    <input  id="paramsInfo" type="text" name="paramsInfo" value='[{"name":"发货区域","value":"东北",displayValue:"东北"}]'>
    <!-- 方式2 -->
    <input type="text" name="param.发货区域" value="东北">
    <input type="text" name="paramDisplay.发货区域" value="东北">

    <!-- 3.2、openresource的其他参数 -->
	<input id="refresh" value="true" type="text" name="refresh">
</form>

<script language='javascript'>
   // 4、提交表单
    var submitForm = document.getElementById("submitForm");
    // 新窗口打开
    //submitForm.target ="_blank";
    // 提交表单
    submitForm.submit();
</script>


post集成示例拆解

示例总共有四个部分组成,下面我们来逐步拆解

(1)设置提供表单的响应区域

在实际的集成场景中,比较常见的就是点击了某些类似资源树上的节点之后再在页面上展示集成资源的结果,这里我们需要使用<form>标签的target参数来指定显示的位置,可以修改target的参数值为不同的值来得到不同的响应效果,如:

...

代码块
languagexml
<iframe id="myFrame" width="100%" height="100%" allowTransparency name="myFrame" />
(2)form表单部分

在<form>标签中需要设置的参数如下:

  • method="post":请求方式设置为post。
  • action="http://localhost:18080/smartbi/vision/openresource.jsp":提交post请求的地址
  • target="":见前一小节

...

代码块
languagexml
<form id="submitForm" method="post" action="http://localhost:18080/smartbi/vision/openresource.jsp" target="myFrame">

</form>


(3)参数部分

在<form>标签内,需要使用input标签来写需要传递的参数内容,这里的input标签必须要需要设置的内容如下:

  • name="resid":标签中的name属性是提交post请求参数的参数名

  • value="I402881e5019608c408c4fb7801960e2ec9b42d3d":标签里的value属性是提交post请求参数的参数值

在一个input标签中name和value需要同时存在,否则传参异常。多个openresource请求的参数需要用多个input标签


代码块
languagexml
<input  id="resid" type="text" name="resid" value="I402881e5019608c408c4fb7801960e2ec9b42d3d" />
<input  id="paramsInfo" type="text" name="paramsInfo" value='[{"name":"发货区域","value":"东北",displayValue:"东北"}]' />


使用post请求来给打开资源传参的时候,除去可以在input标签中设置name属性为paramsInfoz然后value中直接等于传参的json之外,还支持简易版本的传参方式,两种传参方式具体如下。注意两种传参方式选择其一即可。


传参方式一:使用paramsInfo传参

代码块
languagexml
<input  id="paramsInfo" type="text" name="paramsInfo" value='[{"name":"发货区域","value":"东北",displayValue:"东北"}]'>

传参方式二:使用param.参数名传参


代码块
languagexml
<input type="text" name="param.发货区域" value="东北">
<input type="text" name="paramDisplay.发货区域" value="东北">
  • param.参数名:参数的真实
  • paramDisplay.参数名参数的显示值
  • 打开自助仪表盘资源时,参数名对应为筛选器组件的标题