wuxiren123

          系統(tǒng)集成方案(一).NET集成方案

          NET系統(tǒng)集成有自己獨(dú)立的登錄驗(yàn)證方式。比如,跟報(bào)表集成時(shí),不需要再使用報(bào)表內(nèi)置的登錄界面,只需要將報(bào)表默認(rèn)的參數(shù)用戶名fr_username和密碼fr_password發(fā)送給報(bào)表系統(tǒng),觸發(fā)一下報(bào)表驗(yàn)證方式就可以實(shí)現(xiàn)單點(diǎn)登錄了,以下用FineReport的.NET跨域單點(diǎn)登錄案例簡單介紹一下。

          系統(tǒng)本身有獨(dú)立的登錄驗(yàn)證方式如下圖:

           

          1.觸發(fā)報(bào)表驗(yàn)證方法

          報(bào)表集成時(shí)不需要再一次進(jìn)行登錄驗(yàn)證,只需在項(xiàng)目里面的登錄驗(yàn)證頁面內(nèi)觸發(fā)一下報(bào)表方法,如下js方法:

          function doSubmit() {    
                   
          var username =document.getElementById("username").value;  //此處是用來提取用戶名和密碼
                   var password =document.getElementById("userPwd").value;
                  
          var scr = document.createElement("iframe");      //創(chuàng)建iframe  
                   var dt=new Date();
                  scr.src 
          = "/WebReport/ReportServer?op=fs_load&cmd=sso&username=" + username + "&password=" + password+"&time="+dt.toString();   //將報(bào)表驗(yàn)證用戶名密碼的地址指向此iframe  
                  document.getElementsByTagName("head")[0].appendChild(scr);   //將iframe標(biāo)簽嵌入到head中  
              }

          注:此處的單點(diǎn)登錄是登錄報(bào)表管理平臺,而不是FineReport的數(shù)據(jù)決策系統(tǒng),如果需要與數(shù)據(jù)決策系統(tǒng)做單點(diǎn)登錄,需將

          scr.src = " http://localhost:8075/WebReport/ReportServer?op=fs_load&cmd=sso&username=" + username + "&password=" + password;
          改成
          scr.src 
          = " http://localhost:8075/WebReport/ReportServer?op=fs_load&cmd=sso&username=" + username + "&password=" + password;

          點(diǎn)擊項(xiàng)目里面的登錄按鈕,跳到后臺進(jìn)行項(xiàng)目里面的驗(yàn)證,此報(bào)表的驗(yàn)證方式需要在頁面前臺內(nèi)調(diào)用javascript的方式觸發(fā),這邊類似定義了兩個(gè)onclick事件,而.net不能同時(shí)觸發(fā)兩個(gè)onclick事件,所以先要觸發(fā)完一個(gè)onclick事件后再觸發(fā)另一個(gè),考慮報(bào)表沒有驗(yàn)證完.net項(xiàng)目就跳轉(zhuǎn)的話,導(dǎo)致報(bào)表沒有驗(yàn)證成功,所以點(diǎn)擊登錄按鈕首先觸發(fā)報(bào)表驗(yàn)證方法,其次再到.net后臺進(jìn)行驗(yàn)證。

          3. 觸發(fā).net前臺

          觸發(fā)前臺報(bào)表驗(yàn)證方法,新建一個(gè)登錄按鈕,設(shè)置按鈕OnClientClick屬性為:OnClientClick="doSubmit();return false;",即觸發(fā)前臺doSubmit()方法,doSubmit()方法,首先把獲取的用戶名和密碼的值,發(fā)送到報(bào)表系統(tǒng),報(bào)表服務(wù)將帶著這兩個(gè)參數(shù)訪問認(rèn)證地址進(jìn)行認(rèn)證。而項(xiàng)目本身有個(gè)登錄按鈕是觸發(fā)的項(xiàng)目后臺的方法,我們這邊首先觸發(fā)報(bào)表前臺再通過js的方式觸發(fā)后臺的那個(gè)登錄按鈕,所以這邊需要把之前的登錄按鈕設(shè)置隱藏,屬性為Style="display: none;"。

          4. 觸發(fā).net后臺

          報(bào)表驗(yàn)證完再觸發(fā).net項(xiàng)目后臺登錄驗(yàn)證的方法,通過登錄按鈕ID為Button1,使用document.getElementById("Button1").click();觸發(fā)登錄按鈕,但是每個(gè)瀏覽器執(zhí)行的方式不同,所以這邊需要判斷一下,代碼如下:

           if (scr.attachEvent){       //判斷是否為ie瀏覽器  
                         scr.attachEvent("onload"function(){                    //如果為ie瀏覽器則頁面加載完成后立即執(zhí)行  
                             var f = document.getElementById("Button1");  
                             f.click();  
                         }
          );  
                      }
           else {  
                         scr.onload 
          = function(){              //其他瀏覽器則重新加載onload事件  
                              var f = document.getElementById("Button1");  
                              f.click();  
                         }
          ;  
                   }

          下面以簡單的登錄驗(yàn)證頁面login.aspx為例head中調(diào)用javascript

          示例

          1、登錄前臺頁面

          以簡單的登錄驗(yàn)證頁面login.aspx為例,head中調(diào)用javascript觸發(fā)報(bào)表方法:

          <%@ Page Language="C#" AutoEventWireup="true" CodeFile="login.aspx.cs" Inherits="login" %>

          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

          <html xmlns="http://www.w3.org/1999/xhtml" >
          <head runat="server">
              
          <title>無標(biāo)題頁</title>
            
          <script type="text/javascript" language="javascript">  
                 
          function doSubmit() {    
                   
          var username =document.getElementById("username").value;  //此處是用來提取用戶名和密碼
                   var password =document.getElementById("userPwd").value;
                  
          var scr = document.createElement("iframe");      //創(chuàng)建iframe  
                   var dt=new Date();
                  scr.src 
          = "/WebReport/ReportServer?op=fs_load&cmd=sso&username=" + username + "&password=" + password+"&time="+dt.toString();   //將報(bào)表驗(yàn)證用戶名密碼的地址指向此iframe  
                  if (scr.attachEvent){       //判斷是否為ie瀏覽器  
                         scr.attachEvent("onload"function(){                    //如果為ie瀏覽器則頁面加載完成后立即執(zhí)行  
                             var f = document.getElementById("Button1");  
                             f.click();  
                         }
          );  
                      }
           else {  
                         scr.onload 
          = function(){              //其他瀏覽器則重新加載onload事件  
                              var f = document.getElementById("Button1");  
                              f.click();  
                         }
          ;  
                   }
            
                  document.getElementsByTagName(
          "head")[0].appendChild(scr);   //將iframe標(biāo)簽嵌入到head中  
              }
           
            
          </script>
          </head>
          <body>
              
          <form id="form1" runat="server">
              
          <div>
                  
          <asp:TextBox ID="username" runat="server" Style="z-index: 100; left: 156px; position: absolute;
                      top: 42px
          "></asp:TextBox>
                  
          <asp:TextBox ID="userPwd" runat="server" Style="z-index: 101; left: 157px; position: absolute;
                      top: 91px
          "></asp:TextBox>
                  
          <asp:Label ID="Label1" runat="server" Height="22px" Style="z-index: 102; left: 76px;
                      position: absolute; top: 46px
          " Text="用戶名:" Width="77px"></asp:Label>
                  
          <asp:Label ID="Label2" runat="server" Style="z-index: 103; left: 80px; position: absolute;
                      top: 88px
          " Text="密碼:" Width="64px"></asp:Label>
                  
          <asp:Button ID="Button1" runat="server"  Style="z-index: 104; display:none;
                      left: 84px; position: absolute; top: 132px
          " Text="登錄" Width="66px" />
                  
          <asp:Button ID="Button2" runat="server" OnClientClick="doSubmit();return false;"
                      Style
          ="z-index: 106; left: 178px; position: absolute; top: 133px" Text="登錄" Width="100px" />
              
              
          </div>
              
          </form>
          </body>
          </html>

          前臺和后臺驗(yàn)證成功之后,單點(diǎn)登錄頁面就設(shè)計(jì)完成了。

          報(bào)表工具是通過url傳用戶名和密碼進(jìn)行驗(yàn)證,傳到報(bào)表服務(wù)器是以session的方式保存,防止被人中途攔截會導(dǎo)致系統(tǒng)泄密,可以對登錄進(jìn)來的密碼進(jìn)行加密,或者使用https證書,讓請求在傳輸過程中加密,配置方法也很簡單。這種方式還存在一個(gè)證書合法性問題,用自己生成的證書,客戶端在訪問報(bào)表中瀏覽器會顯示證書非法警告,所以需要去購買合法證書。目前國內(nèi)最便宜的證書一年是一千多元。

          2、平臺設(shè)置

          一般情況下報(bào)表集成到.net系統(tǒng),首先登錄訪問.net的項(xiàng)目,所以自定義登錄頁面訪問地址可以不需要設(shè)置,如果沒有登錄到.ne項(xiàng)目,先訪問我們的報(bào)表了,而這時(shí)訪問報(bào)表的登錄頁面是報(bào)表內(nèi)置的登錄界面,需使用自動(dòng)登錄頁面地址為您系統(tǒng)的登錄地址,操作如下:

          打開http://localhost/WebReport/ReportServer?op=fr_platform,F(xiàn)R管理平臺,選擇權(quán)限配置>登錄設(shè)置,自定義登錄頁面訪問地址上,輸入自己的登錄頁面路徑http://localhost/FRtest/login.aspx,如下圖所示:





          posted on 2016-07-27 10:27 喝水居然長肉 閱讀(103) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 东兰县| 化隆| 玉屏| 文成县| 南宫市| 甘德县| 紫云| 杭州市| 玉环县| 福泉市| 琼结县| 叶城县| 杭锦旗| 霸州市| 保定市| 和田市| 阆中市| 安义县| 九江县| 敦化市| 阿克苏市| 博乐市| 驻马店市| 宣化县| 德保县| 依安县| 年辖:市辖区| 三都| 泗洪县| 大新县| 临西县| 鄄城县| 万州区| 沽源县| 沾化县| 陆川县| 临桂县| 仲巴县| 砚山县| 玛纳斯县| 西宁市|