公司開發了自己的WebBI,要求給一個BI報表的ID,即可打開SAP BI里的對應報表,不需要二次登錄。
1. BOE是基於令牌(Token)的認證方式
2. BOE提供直接打開報表的接口地址http://192.168.0.61:8080/OpenDocument/opendoc/openDocument.jsp
根據官方資料,openDocument.jsp頁面需要必備的兩個參數才能打開報表,一個是iDocID(報表的ID),一個是token(令牌)
目前的問題是只需要產生一個令牌即可實現外部系統打開報表的操作,並且能夠實現BOE的單點登錄。
根據一些資料,單獨制作了一個SSO.jsp頁面,放在61的D:\BOE\Business Objects\Tomcat55\webapps\CmcApp下面,注意CmcApp是管理員的登錄界面,不要放在用戶的登錄頁面下(InfoViewApp)。
SSO.jsp介紹:
參數:uid用戶名,pwd密碼,rid報表ID
作用:獲取參數,認證用戶,產生令牌,傳遞到openDocument.jsp,打開報表
SSO.jsp代碼: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <%@ page language="java" contentType="text/html; charset=utf-8"%> <%@ page import="com.crystaldecisions.sdk.framework.ISessionMgr" %> <%@ page import="com.crystaldecisions.sdk.framework.CrystalEnterprise" %> <%@ page import="com.crystaldecisions.sdk.framework.IEnterpriseSession" %> <%@ page import="com.crystaldecisions.sdk.occa.security.ILogonTokenMgr"%> <%@ page import="com.crystaldecisions.sdk.occa.infostore.*" %> <%@ page import="com.crystaldecisions.sdk.properties.*" %> <%@ page import="com.crystaldecisions.sdk.exception.SDKException" %> <%@ page import="javax.servlet.jsp.JspWriter" %> <% try{ String cms = "boeprod01:6400"; String username = request.getParameter("uid"); String password = request.getParameter("pwd"); String reportID = request.getParameter("rid"); if(username==null||password==null||reportID==null){ out.println("參數錯誤,請檢查"); return; } String auth = "secEnterprise"; String token=""; ISessionMgr sessionMgr = CrystalEnterprise.getSessionMgr(); IEnterpriseSession enterpriseSession = sessionMgr.logon(username, password, cms, auth); ILogonTokenMgr logonTokenMgr = enterpriseSession.getLogonTokenMgr(); token = logonTokenMgr.getDefaultToken(); //String URLrequest = "http://192.168.0.61:8080/OpenDocument/opendoc/openDocument.jsp?token=" + token + "&iDocID="+reportID+"&lsSprodNameParam="+strParameter+"&sWindow=New"; String URLrequest = "http://192.168.0.61:8080/OpenDocument/opendoc/openDocument.jsp?sWindow=Same&isApplication=true&token=" + token + "&iDocID="+reportID; response.sendRedirect(URLrequest); } catch(Exception error){ out.println("身份認證錯誤,請檢查!"); } %>
這樣要打開一張報表只需要在瀏覽器地址中輸入:
http://192.168.0.61:8080/CmcApp/SSO.jsp?uid=testadmin&pwd=*****&rid=6729
即可。
在地址欄中直接輸入地址,支持所有瀏覽器。
但是,由於真實打開報表頁面的地址為:viewDocument.jsp,頁面中需要執行js代碼,如果外部系統打開報表是通過iframe打開的話,IE瀏覽器會自動攔截,因為IE的權限設置,在iframe中不允許跨域執行內嵌頁的js代碼。
Chrome,Firefox等瀏覽器沒有這個限制,可以正常在iframe中打開
暫時的方案:將192.168.0.61加入到IE的可信任站點即可解決問題。
要想在iframe中打開,最可靠的方案是重寫opendocument.jsp和viewDocument.jsp,繞開js。
另外簡單的方法是把webbi和boe放在同一個域名下,因為ie禁止iframe跨域訪問。
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。