最近在使用CAS 做SSO 時遇到了迴流問題
(迴流簡要說明:
應用和服務在同一內網IP,本身服務和應用又被映射了外網IP,當應用使用外網IP訪問服務時,訪問被拒絕。因為路由檢測到訪問的服務在同一內網IP地址上,只能通過內網IP訪問,或者更改路由的配置。)
在這裡介紹軟體的解決方案:
由於CAS驗證的需要無法直接將IP配置改為內網IP,所以只能動態判斷,當發生WebException時自動將URL中的地址替換為本機地址,用來解決迴流問題
判斷的代碼如下(ReplaceLocalIP是用來替換本地地址的方法)
try { serverResponse = RetrieveResponseFromServer(validationUrl, ticket); } catch (WebException) { validationUrl = ReplaceLocalIP(validationUrl); serverResponse = RetrieveResponseFromServer(validationUrl, ticket); }ReplaceLocalIP方法:
/// <summary> /// 替換為本地地址針對 迴流問題 /// </summary> /// <param name="validationUrl"></param> /// <returns></returns> private string ReplaceLocalIP(string validationUrl) { int iIndex = validationUrl.IndexOf("//"); int iIndex1 = validationUrl.IndexOf("/", iIndex + 2); string sHostOld = validationUrl.Substring(iIndex + 2, iIndex1 - iIndex + 2); string[] ArrayAdd = sHostOld.Split(':'); ArrayAdd[0] = "127.0.0.1"; string sHostNew = string.Empty; foreach (var item in ArrayAdd) sHostNew += item+":"; sHostNew = sHostNew.Remove(sHostNew.Length - 1); string sResult = validationUrl.Replace(sHostOld, sHostNew); return sResult; }