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

前端之家收集整理的这篇文章主要介绍了使用 jsonp 实现 多站点 单点登录前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

<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=?',pwd)

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

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

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

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

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

原文链接:https://www.f2er.com/json/290777.html

猜你在找的Json相关文章