rtx登錄內網系統


公司內部使用rtx進行溝通和交流,經常遇到訂餐的問題,用php寫了一個訂餐系統,實現rtx上點擊鏈接打開系統就自動登錄了,無需再次輸入用戶名和密碼。

 

實現的思路,就是在點擊鏈接的時候獲取當前rtx的user和sign,拼接成一個url追加至系統訪問地址后,系統首頁在獲取網頁參數后,通過ajax請求后台服務,后台服務調用rtx的一個服務,驗證簽名。如果通過則系統直接讓該用戶自動登錄,前台ajax直接頁面進入系統。

 

rtx客戶端 –> 帶上user & sign訪問系統 –> 系統根據參數檢驗身份並返回結果 –> 處理結果…

 

安裝完rtx后,可以在rtx面板上添加一個自定義的按鈕,內嵌一個頁面。

image

 

假設該頁面有如下的一個鏈接:

   1: <a href="http://192.168.0.xx/" title="xx系統" onclick="xxClickHandler();return false;">◆xx系統</a>

那么xxClickHandler()函數會在點擊鏈接時,獲取最新的sign,然后打開網頁

   1: function xxClickHandler() {
   2:     var _href = getEl('xxxLink').getAttribute('href', 2);
   3:  
   4:     var _str = getXXUrl();
   5:  
   6:     if (_str) {
   7:         _href += _str;
   8:     }
   9:  
  10:     window.open(_href);
  11: }
  12:  
  13: function getXXUrl() {
  14:     var objKerRoot;
  15:     var objHelper;
  16:     var objApp;
  17:  
  18:     try {    
  19:        objKerRoot = rtxObj.GetObject("KernalRoot");
  20:        objApp = rtxObj.GetObject("AppRoot")
  21:        objHelper = objApp.GetAppObject("RTXHelper");
  22:     } catch(e) {
  23:         //alert(e.message);
  24:        return ;
  25:     }
  26:  
  27:     if (objKerRoot != null) {
  28:         var objBuddyManager = objKerRoot.RTXBuddyManager;
  29:         var objGroupManager = objKerRoot.RTXGroupManager;
  30:         var accout = objKerRoot.Account;
  31:         
  32:         if(accout != "") {            
  33:             var rtxName = objBuddyManager.Buddy(accout).Name;            
  34:             var groupName = objHelper.GetBuddyDept(accout);
  35:             var sign = objKerRoot.Sign.GetString("Sign");
  36:             
  37:             var url = "?id=" + accout + '&name=' + escape(rtxName) + "&sign=" + escape(sign);
  38:             
  39:             return url;
  40:         }
  41:     }
  42: }

點擊鏈接時,得到如下的url地址

   1: http://192.168.0.xx/?id=123456&name=%xxx%u4E49&sign=xxxxxxxxxxxxxxxxxxxxx/9Hhb4cVmRoe4TNbyiCXPxxxxx%3D

系統獲取參數,然后請求rtx的SignAuth.cgi接口---實際就是一個php程序

image

   1: <?PHP
   2:  
   3: $user = $_GET["user"];
   4: $sign = $_GET["sign"];
   5:  
   6: try
   7: {
   8:  
   9:     $RootObj= new COM("RTXSAPIRootObj.RTXSAPIRootObj");
  10:     $UserAuth = $RootObj->UserAuthObj;
  11:     
  12:     $bisSuccess = $UserAuth->SignatureAuth($user, $sign); //驗證簽名
  13:     
  14:     if($bisSuccess)
  15:     {
  16:         echo "success!";
  17:     }
  18:     else
  19:     {
  20:         echo "failed!";
  21:     }
  22:  
  23: }
  24: catch (Exception $e) {
  25:  
  26:         //有任何其他異常,那么返回reg_err.php
  27:         $errstr = $e->getMessage();
  28:         $splitstr = explode(':', $errstr, -1);
  29:         $errstrlast = $splitstr[count($splitstr)-1];
  30:  
  31:         echo $errstrlast;
  32:     
  33:         return;
  34:     }
  35:  
  36:  
  37: ?>

 

前台頁面通過ajax,請求系統的一個接口,該接口去驗證當前rtx的身份,通過則自動登錄系統並返回身份通過的信息,前台判斷如果通過則跳轉頁面。

后台驗證身份的php程序代碼:

   1: <?php
   2: session_start();
   3:  
   4: date_default_timezone_set("Asia/Shanghai");
   5:  
   6: require_once 'inc/conn.php';
   7: DBHelper::buildLink();
   8:  
   9: include 'snoopy/Snoopy.class.php';
  10: $snoopy = new Snoopy();
  11:  
  12: $sourceURL = $_REQUEST['url'];
  13:  
  14: $snoopy->fetch($sourceURL);
  15:  
  16: $rs = mb_convert_encoding($snoopy->results, "utf-8", "GBK");
  17:  
  18: if ($rs == "success!") {
  19:     $uin = $_REQUEST['user'];
  20:     
  21:     $sql = "select * from user_info where userid='$uin'";
  22:     
  23:     DBHelper::query($sql, function($result, $len) {
  24:         
  25:         if ($len == 1) {
  26:             $row = mysqli_fetch_array($result);
  27:             //設置session和cookie            
  28:             setcookie("xxx_uname", $upt, time()+10000*10000, "/", $_SERVER["HTTP_HOST"]);
  29:         }
  30:     });
  31:     
  32:     echo "{code:'0', msg:''}";
  33: } else {
  34:     echo "{code:'1', msg:'登錄失敗~'}";
  35: }
  36:  
  37: ?>

 

不過實際應用起來,感覺並不穩定,也就是驗證sign的接口,有時候返回失敗的信息,正常的情況下是直接返回”success!”


免責聲明!

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



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