【原】Web intelligence数据分析报表(四):单点登陆(SSO)

 

需求:不考虑BO报表的权限,能够通过URL地址直接访问webi报表,而且要部署简单。

这种需求貌似免登陆方式查看报表。根据BO技术支持提供的资料以.net方案,这种方案可以解决这种问题,但是不够简练,在我看来做二次开发比较好。这个方案大体思路是这样:通过.net调用BOAPI实现登陆,以及文档资源的读取,以及权限的验证等等。BO基于浏览其设计验证核心是通过SessionBOToken进行权限验证的。这种方式不过多地介绍,如果买了正版BO,这些资料解决方案都会有的。在拿到这个需求时,我的想法就是能够利用BO.net支持,直接使用他内置浏览功能,那样不是更好!比如BO内置的.net虚拟目录就有opendocument.aspx文件,以及webi设计浏览功能。要解决就是怎么登陆到BO就可以了。

         仔细查看webi设计基于浏览器IIS虚拟目录Infoview(在businessobjects>enterprise115>infoview)这个地方就是我们设计运行程序目录。可以看到logon.aspx就是登陆BO文件,如果绕过或者使用隐含方式进行登陆,就可以通过opendocument.aspx进行报表浏览。绕过登陆去浏览报表,那是不太可能的,因为BO对报表操作浏览采用权限验证方式,研究这个API接口耗时,意义也不大。于是乎我就想造一个aspx文件直接通过它隐含登陆(隐含登陆就是没有登陆界面,直接读取帐户信息登陆)。那为什么可以浏览报表呢,这就是我前面说到的BO基于浏览器设计是通过Session或者Token参数来进行用户信息验证的。如果设计的隐含登陆aspx文件可以设置Session那样,不就Ok了!实践证明,确实可以。具体方法如下:

1.         基本思路是,通过一个aspx文件读取配置心中BO登陆信息,然后登陆,获取设置Session值,最后通过参数化拼接opendocument.aspxURL字符串,重定向到该路径就可以了。

2.         vs创建一个解决方案,添加一个aspx文件,如:BOSSO.aspx

3.         Page_Load添加如下代码

string strReportUrl = string.Empty;

            // opendocument.aspx 的服务器浏览路径

            string strPath = ConfigurationManager.AppSettings["BOPath"];

           // 服务器系统

            string strSystem = ConfigurationManager.AppSettings["BOSystem"];

            // 用户

            string strUser = ConfigurationManager.AppSettings["BOUser"];

            // 密码

            string strPassword = ConfigurationManager.AppSettings["BOPassword"];

            // 报表ID

            string strDocID = Request.QueryString["DocID"];

            // 拼接ReportUrl

            strReportUrl = strPath + "?sIDTyp=CUID&sType=wid&iDocID=" + strDocID;

            // BO登陆认证

            //获取Session有两种方式

            // 第一种

            CrystalDecisions.Enterprise.WebControls.Identity MainIdentity = new CrystalDecisions.Enterprise.WebControls.Identity();

            bool Success = MainIdentity.Logon(strUser, strPassword, strSystem, "Enterprise");

 

            // 第二种

            //SessionMgr sessionMgr = new SessionMgr();

            //EnterpriseSession enterpriseSession = sessionMgr.Logon(user.Value, password.Value, CMS.Value, auth_type.Value);

            //Session["CE_ENTERPRISESESSION"] = enterpriseSession;

            if (Success)

            {

                // 存入Session

                HttpContext.Current.Session["CE_ENTERPRISESESSION"] = MainIdentity.EnterpriseSession;

                if (String.IsNullOrEmpty(strDocID)!=true)

                {

                    Response.Redirect(strReportUrl, false);

                }

                else

                {

                    Response.Write("<script language='javascript'>alert("'Please input docID!"');</script>");

                }

            }

            else

            {

                Response.Redirect("Logon.aspx", false);

            }

这段代码很好理解,不多说明了

4.         然后编译生成dll程序集,将dll程序集拷贝到infoviewbin目录下,将BOSSO.aspx拷贝到infoview目录下,同时在infoviewweb.config配置文件中的appSettings配置添加上述几个节点。

5.         需要注意的是:重起一下IIS,对BOE XLR2版本必须将infoview目录设置为asp.net2.0

6.         现在你就可以直接通过访问BOSSO.aspx访问报表了,如:http://192.168.1.75/businessobjects/Enterprise115/InfoView/BOSSO.aspx?docID=5091DocID就是webi文档的CURD

 

posted on 2008-07-31 18:37  kitzone  阅读(1729)  评论(0)    收藏  举报

导航