在信息系統開發的時,根據相關業務邏輯不免會多系統之間互相登陸。通常狀況下咱們須要在多系統之間使用多個用戶名和密碼。這樣客戶就須要在多個系統之間重複登錄。每次登陸都須要輸入用戶名和密碼。最近比較流行的就是OAuth。新浪微博這個開放系統作的就很好。但OAuth並不是本文討論範疇。這裏主要討論jQuery1.5 jsonp 在Asp.net MVC3 中的應用。javascript
假設您的開發團隊欲爲某集團公司開發一整套信息管理系統,目前首要開發的就是一套訂單系統和一套內部OA系統。前提是這兩套系統使用同一套數據庫。只是兩個不一樣的MVC3.0 Web項目。也就是說會在同一個IIS上部署兩個虛擬目錄。 咱們的目標是在不使用WCF、WebService 等技術實現跨域登陸。也就是說用戶用同一個賬號登陸了訂單系統,那麼客戶就能夠直接登陸OA系統。而不須要在OA系統上再輸入一次用戶名和密碼。反之亦成立。java
<
script type
=
"
text/javascript
"
>
2
$(
function
() {
3
var
oAUri
=
"
@ViewBag.OAVRUri
"
;
4
var
user
=
"
@ViewBag.User
"
;
5
var
pwd
=
"
@ViewBag.PassWord
"
;
6
7
$.ajax({
8
type:
"
GET
"
,
9
url: String.format(
'
{0}Account/AppLogOn?UserName={1}&PassWord={2}&callback=?
'
, oAUri, user, pwd),
10
cache:
false
,
11
error:
function
() {
12
alert(
"
程序出錯,請聯繫管理員.
"
);
13
},
14
dataType:
"
jsonp
"
,
15
jsonp:
'
callback
'
,
16
success:
function
(result) {
17
18
}
19
});
20
21
});
22
<
/
script>
1
public
class
JsonpResult
<
T
>
: ActionResult
2
{
3
public
T Obj {
get
;
set
; }
4
public
string
CallbackName {
get
;
set
; }
5
6
public
JsonpResult(T obj,
string
callback)
7
{
8
this
.Obj
=
obj;
9
this
.CallbackName
=
callback;
10
}
11
12
public
override
void
ExecuteResult(ControllerContext context)
13
{
14
var js
=
new
System.Web.Script.Serialization.JavaScriptSerializer();
15
var jsonp
=
this
.CallbackName
+
"
(
"
+
js.Serialize(
this
.Obj)
+
"
)
"
;
16
17
context.HttpContext.Response.ContentType
=
"
application/json
"
;
18
context.HttpContext.Response.Write(jsonp);
19
}
20
}
public
ActionResult AppLogOn(
string
UserName,
string
PassWord,
string
callback)
{
return
new
JsonpResult
<
object
>
(
new
{ success
=
true
, rankName
=
rankName }, callback);
}
var jsonp = this.CallbackName + "(" + js.Serialize(this.Obj) + ")";還有一點咱們要注意的就是安全隱患問題: