J2EE項目集成SAP的BO報表


網上的方案:

每個用戶在自己的J2EE系統的用戶登陸的同時登陸bo系統,這做法的缺點是登陸bo速度慢,而且如果J2EE用戶比較多的話會在bo服務器生成很多的token。

 

最佳方案(自己研究):

1、調用bo報表的路徑:

如果是在iframe中引入該地址,則需要將bo服務器的ip加入可信任站點,否則訪問將報500錯誤

原因:iframe是沒有權限在父頁面寫session信息的

 

2、使用quartz在服務器啟動的時候自動登陸bo服務器獲取token。

在J2EE服務中新建一個bologin.do的鏈接來處理bo登陸,登陸后將token放入application中。

代碼如下:

        HttpSession session = request.getSession();
        
        String cms = "xx.xx.xx.xx:6400";
        
        //認證的安全類型,類型是以上幾種,如果是SAP,則類型字符為secSAPR3
        String authentication = "secEnterprise";
        
        //用戶名,如果是SAP系統方式登錄,格式為bwp~888/eiacext1
        String poUsername = "administrator";
        String poPassword = "password";//密碼

        //登錄並獲得TOKEN,並命名用OpenDocument方式打開一個文件
        ISessionMgr sessionMgr = CrystalEnterprise.getSessionMgr();
        IEnterpriseSession enterpriseSession = sessionMgr.logon(poUsername, poPassword, cms,authentication);
        ILogonTokenMgr mgr = enterpriseSession.getLogonTokenMgr();
        
        /**
         * 
         * String  token=logonTokenMgr.createLogonToken("",10,5);
            其中createLogonToken(java.lang.String clientComputerName, int validMinutes, int validNumOfLogons)
            clientComputerName為使用這個token的客戶端計算機名,空字符串表示該token可被任何客戶端使用;
            validMinutes為token的有效時間(分鍾);
            validNumOfLogons 表示該token允許被使用的最大次數。
         * 
         */
        String tokenStr = mgr.createLogonToken("",24*60,Integer.MAX_VALUE);
        
        session.getServletContext().setAttribute("token", tokenStr);
        return null;

3、由於token的是有有效期的,而且過期后在讓我們正常的J2EE項目發生bo的session超時而將我們的系統跳轉到bo的登陸界面!!!

故我們需要設置token的有效期,設置有效期為1天。

String tokenStr = mgr.createLogonToken("",24*60,Integer.MAX_VALUE);

4、設置定時器在凌晨去重新登陸bo獲取新的token,保證token永不超時(不建議在第3步將超時時間設置過長)。

quartz定時器的用法參考我的另外一篇博文:http://www.cnblogs.com/yangzhilong/p/3349116.html

文章中java代碼用到了SAP的jar包,可以去BO服務器的目錄上獲取


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM