小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

在ASP.NET MVC3 中利用JSONP跨域登錄WEB系統(tǒng)

 kittywei 2012-04-20

在信息系統(tǒng)開發(fā)的時(shí),根據(jù)相關(guān)業(yè)務(wù)邏輯難免會(huì)多系統(tǒng)之間互相登錄。一般情況下我們需要在多系統(tǒng)之間使用多個(gè)用戶名和密碼。這樣客戶就需要在多個(gè)系統(tǒng)之間重復(fù)登陸。每次登錄都需要輸入用戶名和密碼。最近比較流行的就是OAuth。新浪微博這個(gè)開放系統(tǒng)做的就很好。但OAuth并非本文討論范疇。這里主要討論jQuery1.5 jsonp 在Asp.net MVC3 中的應(yīng)用。

  本文應(yīng)用場(chǎng)景:

  假設(shè)您的開發(fā)團(tuán)隊(duì)欲為某集團(tuán)公司開發(fā)一整套信息管理系統(tǒng),目前首要開發(fā)的就是一套訂單系統(tǒng)和一套內(nèi)部OA系統(tǒng)。前提是這兩套系統(tǒng)使用同一套數(shù)據(jù)庫。只是兩個(gè)不同的MVC3.0 Web項(xiàng)目。也就是說會(huì)在同一個(gè)IIS上部署兩個(gè)虛擬目錄。  我們的目標(biāo)是在不使用WCF、WebService 等技術(shù)實(shí)現(xiàn)跨域登錄。也就是說用戶用同一個(gè)賬號(hào)登錄了訂單系統(tǒng),那么客戶就可以直接登錄OA系統(tǒng)。而不需要在OA系統(tǒng)上再輸入一次用戶名和密碼。反之亦成立。

  jQuery1.5 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,
error:
function () {
alert(
"程序出錯(cuò),請(qǐng)聯(lián)系管理員.");
},
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 簡單調(diào)用如下:

public ActionResult AppLogOn(string UserName, string PassWord, string callback)
{
return new JsonpResult<object>(new { success = true, rankName = rankName }, callback);
}

  AppLogOn的action參數(shù)完全和上文中的jquery $.ajax 參數(shù)一致:

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

  小結(jié):

  Jsonp的服務(wù)器端的原理其實(shí)就是回調(diào)一個(gè)js函數(shù)名(這里是callback參數(shù))將該參數(shù)傳給服務(wù)端,接著再由服務(wù)器端執(zhí)行這個(gè)callback js函數(shù), 同時(shí)附上該js函數(shù)的參數(shù)。比如上文的C#代碼: var jsonp = this.CallbackName + "(" + js.Serialize(this.Obj) + ")";還有一點(diǎn)我們要注意的就是安全隱患問題:在使用jsonp由于涉及到跨域,需要考慮到對(duì)方站點(diǎn)或者對(duì)方系統(tǒng)的安全性問題。應(yīng)當(dāng)避免安全隱患,不能濫用jsonp。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多