Oracle BIEE11G --- ADF_IFRAME
最近项目上有些变化,部门工作人员开始着手于BIEE11G界面的定制,首先开始的是报表和图形的显示部分,目前由于此部分内容已经加入了IPAD等职能终端实现,当时使用的JDEVELOPER 开发的ADF 效果不错,延迟也没有多少。现在大家都炒作响应式设计,也想把ADF 的application用在WEB站点上。
遇到了点问题,在FLEX或者HTML中调用IFRAME控件时,
得到的HTTP请求报错如下,很值得研究:
1: 77:07:27.035 0.041 623 174
2: GET
3: (Aborted) text/html (NS_BINDING_ABORTED)
4: http://10.14.1.158:7101/Application7-ViewController-context-root/faces/jdczs.jspx?_adf.ctrl-state=1bb3lb5c3y_3&_afrRedirect=74571037281509
报的错是NS_BINDING_ABORTED,服务器主动拒绝。
再分析HTTP头,
1: (Status-Line) HTTP/1.1 200 OK
2: Date Thu, 25 Apr 2013 07:05:41 GMT
3: Transfer-Encoding chunked
4: Content-Type text/html;charset=UTF-8
5: X-ORACLE-DMS-ECID f7a7cc060a4c8848:-6d134d01:13e3ffff60e:-8000-0000000000001c65
6: X-Powered-By Servlet/2.5 JSP/2.1, JSF/2.0
7: X-Frame-Options sameorigin
值得注意的X-Frame-Option ,很显然由于I-Frame嵌入的问题
这是我定位问题的思路:
1. 部署ADF的WEBLOG进行了域控制,必须在同一站点进行IFRAME的嵌套。
沿着这个思路下去的解决方案必然是:
在同域的WEBLOGIC中再起个站点,进行桥接中转。 ---测试,失败
使用非IFRAME空间调用ADF --- 这个肯定能解决问题,但是实施起来难度较大。
2.是否 OBIEE中进行HTTP请求的控制?
翻阅文档
B.1.1Protecting Pages in Oracle BI EE from Attack
http://docs.oracle.com/cd/E21764_01/bi.1111/e10541/psconfigset.htm?1356360819#CIHFJGHF
找到解决问题的办法
默认情况下,出于安全的考虑(clickjacking),BIEE 11g是不能直接嵌入iframe中的,
会提示“OBIEE content can not be displayed in the IFrame”
如果有这方面的需要,我们需要进行如下配置:
修改MV_HOME/instances/instance1/config/OracleBIPresentationServicesComponent/coreapplication_obips1目录下的instanceconfig.xml
在Security标签内加入<InIFrameRenderingMode>allow</InIFrameRenderingMode>
如下图所示:
1: <Security>
2: <InIFrameRenderingMode>allow</InIFrameRenderingMode>
3: <!--This Configuration setting is managed by Oracle Enterprise Manager Fusion Middleware Control-->
4: <ClientSessionExpireMinutes>30</ClientSessionExpireMinutes>
5: </Security>
6: <Security>
7: <InIFrameRenderingMode>allow</InIFrameRenderingMode>
8: <!--This Configuration setting is managed by Oracle Enterprise Manager Fusion Middleware Control-->
9: <ClientSessionExpireMinutes>30</ClientSessionExpireMinutes>
10: </Security>
注:InIFrameRenderingMode有三种取值,分别是prohibit、sameDomainOnly、allow 大家可以根据自己的实际需要选择对应的值
修改MV_HOME/Oracle_BI1/bifoundation/web/app/WEB-INF 目录下的web.xml
添加如下内容:
1: <context-param>
2: <param-name>oracle.adf.view.rich.security.FRAME_BUSTING</param-name>
3: <param-value>never</param-value>
4: </context-param>
最终如下图所示:
1: <servlet-mapping>
2:
3: <servlet-name>RelatedContent</servlet-name>
4: <url-pattern>/RelatedContent</url-pattern>
5: </servlet-mapping>
6:
7: <context-param>
8: <param-name>oracle.adf.view.rich.security.FRAME_BUSTING</param-name>
9: <param-value>never</param-value>
10: </context-param>
11:
12: <login-config>
13: <auth-method>CLIENT-CERT</auth-method>
14: </login-config>
15: <servlet-mapping>
16: <servlet-name>RelatedContent</servlet-name>
17: <url-pattern>/RelatedContent</url-pattern>
18: </servlet-mapping>
19:
20: <context-param>
21: <param-name>oracle.adf.view.rich.security.FRAME_BUSTING</param-name>
22: <param-value>never</param-value>
23: </context-param>
24:
25: <login-config>
26: <auth-method>CLIENT-CERT</auth-method>
27: </login-config>
修改完之后重启BI服务即可,如果还不行,请清除浏览器缓存。还是不行。
做了一个小测试,运行了一个站点
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2 <html> 3 <head> 4 <title> New Document </title> 5 <meta http-equiv="Referer" content="http://10.14.1.158:7101/"> 6 </head> 7 <body> 8 <h1 color=red>Hello Iframe</h1> 9 <iframe id="myframe" width="100%" height='650' src='http://localhost:7101/anaytics/biee' ></iframe> 10 </body> 11 </html>
ok 页面可以正常显示,说明BIEE的界面是可以嵌入进去的。现在把问题的重点定位在ADF Project中。
http://docs.oracle.com/cd/E35521_01/web.111230/e16181/ap_config.htm#BABDHGEJ
其中有个配置的值:
1 <context-param> 2 <description>Add by Jerry</description> 3 <param-name>oracle.adf.view.rich.security.FRAME_BUSTING</param-name> 4 <param-value>samorgin</param-value> 5 </context-param>
这个配置项同BIEE中的意义基本相同,按照文档修改为
1 <context-param> 2 <description>Add by Jerry</description> 3 <param-name>oracle.adf.view.rich.security.FRAME_BUSTING</param-name> 4 <param-value>samorgin</param-value> 5 </context-param>
再进行测试,OK ,大功告成。