BIEE 11G和CAS集成零代碼編寫,只需配置。
更改BIEE analytics應用的web.xml
將analytics.war解包(使用7-zip或者Win-rar就可以),然后修改WEB-INF下的web.xml
注:analytics.ear可以從$MV_HOME/Oracle_BI1/bifoundation/jee下找到,將analytics.ear解壓之后得到analytics.war和analytics-ws.war
修改過的web.xml,添加內容,如下:
[html]
<!-- ======================== 單點登錄開始 ======================== -->
<!-- 用於單點退出,該過濾器用於實現單點登出功能,可選配置-->
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<!-- 該過濾器負責用戶的認證工作,必須啟用它 -->
<filter>
<filter-name>CASFilter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://sso.aurora-framework.org:8081/cas/login</param-value>
<!--這里的server是服務端的IP-->
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://sso.aurora-framework.org:9704</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 該過濾器負責對Ticket的校驗工作,必須啟用它 -->
<filter>
<filter-name>CAS Validation Filter</filter-name>
<filter-class>
org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>https://sso.aurora-framework.org:8081/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://sso.aurora-framework.org:9704</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Validation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
該過濾器負責實現HttpServletRequest請求的包裹,
比如允許開發者通過HttpServletRequest的getRemoteUser()方法獲得SSO登錄用戶的登錄名,可選配置。
-->
<filter>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<filter-class>
org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
該過濾器使得開發者可以通過org.jasig.cas.client.util.AssertionHolder來獲取用戶的登錄名。
比如AssertionHolder.getAssertion().getPrincipal().getName()。
-->
<filter>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ======================== 單點登錄結束 ======================== -->
<!-- ======================== 單點登錄開始 ======================== -->
<!-- 用於單點退出,該過濾器用於實現單點登出功能,可選配置-->
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<!-- 該過濾器負責用戶的認證工作,必須啟用它 -->
<filter>
<filter-name>CASFilter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://sso.aurora-framework.org:8081/cas/login</param-value>
<!--這里的server是服務端的IP-->
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://sso.aurora-framework.org:9704</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 該過濾器負責對Ticket的校驗工作,必須啟用它 -->
<filter>
<filter-name>CAS Validation Filter</filter-name>
<filter-class>
org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>https://sso.aurora-framework.org:8081/cas</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>http://sso.aurora-framework.org:9704</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Validation Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
該過濾器負責實現HttpServletRequest請求的包裹,
比如允許開發者通過HttpServletRequest的getRemoteUser()方法獲得SSO登錄用戶的登錄名,可選配置。
-->
<filter>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<filter-class>
org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
該過濾器使得開發者可以通過org.jasig.cas.client.util.AssertionHolder來獲取用戶的登錄名。
比如AssertionHolder.getAssertion().getPrincipal().getName()。
-->
<filter>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ======================== 單點登錄結束 ======================== -->
其中serverName是biee analytics的地址和端口,當前配置cas項目和biee在同一台機器上,所以用相同的,請更加項目實際情況,修改為biee實際部署的機器地址。
添加證書
Biee作為一個應用安裝在weblogic服務器上,weblogic使用的jvm不一定是系統安裝的,可以在這里(console->bifoundation->環境->服務器->bi_server1->密鑰庫)找到weblogic使用的jvm:
修改“java標准信任密鑰庫密碼短語”,輸入默認密碼changeit。
並把上文中提到的aurora.crt文件導入到“java標准信任密鑰庫”指定的目錄中,這里是“D:/BIEE11116/jrockit_160_24_D1.1.2-4/jre/lib/security/cacerts”。所以完整語句是:
[java]
keytool -import -keystore "D:/BIEE11116/jrockit_160_24_D1.1.2-4/jre/lib/security/cacerts" -file E:/tomcat/tomcat7/keystore/aurora.crt -alias aurora
keytool -import -keystore "D:/BIEE11116/jrockit_160_24_D1.1.2-4/jre/lib/security/cacerts" -file E:/tomcat/tomcat7/keystore/aurora.crt -alias aurora
注意:如果weblogic使用的jvm不是sun公司提供的,那么導入沒有問題,在運行時,會報證書已經破損的錯誤。此時需要修改$MV_HOME\user_projects\domains\bifoundation_domain\bin\setDomainEnv.cmd(這里是windows,如果是unix應該找到setDomainEnv.sh)文件,在末尾添加
[java]
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dfile.encoding=GBK -DUseSunHttpHandler=true
set JAVA_OPTIONS=%JAVA_OPTIONS% -Dfile.encoding=GBK -DUseSunHttpHandler=true
修改完畢之后還需要將CAS client的jar包(如:cas-client-core-3.2.1.jar)到WEB-INF/lib
修改完畢之后,使用JDK自帶的jar 進行重新打包,
例如:
[java]
jar -cf analytics.war .
jar -cf analytics.war .
然后在將analytics.war及analytics-ws.war以及之前同級目錄下的META-INF文件夾一同打包成analytics.ear
例如:
[java]
jar -cf analytics.ear .
jar -cf analytics.ear .
之后在到weblogic console中重新部署該應用,並啟動。
在到em里對BI啟用SSO
如下圖所示:
激活更改,重啟opmn所有組件就OK了。
訪問BIEE
自動跳轉為
把biee頁面作為iframe嵌入到java web項目頁面中
默認情況下,出於安全的考慮,BIEE 11g是不能直接嵌入iframe中的,會提示“OBIEE content can not be displayed in the IFrame”。
如果有這方面的需要,我們需要進行如下配置:
修改$MV_HOME/instances/instance1/config/OracleBIPresentationServicesComponent/coreapplication_obips1目錄下的instanceconfig.xml
在Security標簽內加入allow。
如下圖所示:
[html]
<Security>
<InIFrameRenderingMode>allow</InIFrameRenderingMode>
<ClientSessionExpireMinutes>210</ClientSessionExpireMinutes>
</Security>
<Security>
<InIFrameRenderingMode>allow</InIFrameRenderingMode>
<ClientSessionExpireMinutes>210</ClientSessionExpireMinutes>
</Security>
注:
InIFrameRenderingMode有三種取值,分別是prohibit、sameDomainOnly、allow 大家可以根據自己的實際需要選擇對應的值
詳情請
修改$MV_HOME/Oracle_BI1/bifoundation/web/app/WEB-INF 目錄下的web.xml
添加如下內容:
[html]
oracle.adf.view.rich.security.FRAME_BUSTING
never
oracle.adf.view.rich.security.FRAME_BUSTING
never
效果如下:
修改完之后重啟BI服務即可,如果還不行,請清除瀏覽器緩存。
頁面中嵌入BIEE
在頁面中添加
[html]
<iframe id="biee" frameborder="no" width="1170" height="545" src="http://sso.aurora-framework.org:9704/analytics/saw.dll?bieehome" style="broder:none;margin:0;padding:0;" />
<iframe id="biee" frameborder="no" width="1170" height="545" src="http://sso.aurora-framework.org:9704/analytics/saw.dll?bieehome" style="broder:none;margin:0;padding:0;" />
效果如下: