最近在使用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; }