软件解决路由回流问题

来源:互联网 发布:和皮影客累似的软件 编辑:程序博客网 时间:2024/04/29 10:54

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