使用 jsonp 实现 多站点 单点登录

来源:互联网 发布:plc编程电缆 编辑:程序博客网 时间:2024/06/05 17:56

   <script type="text/javascript"> 

      $(function () { 

            var oAUri = "@ViewBag.OAVRUri"; 

            var user = "@ViewBag.User"; 

         var pwd = "@ViewBag.PassWord"; 

           $.ajax({ 

               type: "GET", 

                url: String.format('{0}Account/AppLogOn?UserName={1}&PassWord={2}&callback=?', oAUri, user, pwd),

                cache: false,11              

  error: function () {

                  

alert("程序出错,请联系管理员.");

                },

                dataType: "jsonp",

                jsonp: 'callback',

               success: function (result) {

              }

           });

       });

  </script>

 


   在MVC3.0中建立JSONP专用ActionResult

 

      代码如下:

 

 

 

 public class JsonpResult<T> : ActionResult 

     { 

        public T Obj { get; set; }

        public string CallbackName { get; set; } 

        public JsonpResult(T obj, string callback) 

        { 

             this.Obj = obj; 

            this.CallbackName = callback;

       }

public override void ExecuteResult(ControllerContext context)

         {

             var js = new System.Web.Script.Serialization.JavaScriptSerializer();

             var jsonp = this.CallbackName + "(" + js.Serialize(this.Obj) + ")";

         context.HttpContext.Response.ContentType = "application/json";

             context.HttpContext.Response.Write(jsonp);

         }

     }

 

JsonpResult 简单调用如下:

 

 

 public ActionResult AppLogOn(string UserName, string PassWord, string callback)

 return new JsonpResult<object>(new { success = true, rankName = rankName }, callback);

}

 

AppLogOn的action参数完全和上文中的jquery $.ajax 参数一致:

 

url: String.format('{0}Account/AppLogOn?UserName={1}&PassWord={2}&callback=?', oAUri, user, pwd)

 

小结:     Jsonp的服务器端的原理其实就是回调一个js函数名(这里是callback参数)将该参数传给服务端,

接着再由服务器端执行这个callback js函数,同时附上该js函数的参数。

比如上文的C#代码:var jsonp = this.CallbackName + "(" + js.Serialize(this.Obj) + ")";

还有一点我们要注意的就是安全隐患问题:在使用jsonp由于涉及到跨域,需要考虑到对方站点或者对方系统的安全性问题。

应当避免安全隐患,不能滥用jsonp

原创粉丝点击