现在的位置: 首页 > 综合 > 正文

软件解决路由回流问题

2013年09月07日 ⁄ 综合 ⁄ 共 1014字 ⁄ 字号 评论关闭

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



抱歉!评论已关闭.