在ASP.NET MVC3 中利用JSONP跨域登录WEB系统
2016-05-16 13:47
495 查看
http://www.cnblogs.com/ryanding/archive/2011/04/08/2008628.html
在信息系统开发的时,根据相关业务逻辑难免会多系统之间互相登录。一般情况下我们需要在多系统之间使用多个用户名和密码。这样客户就需要在多个系统之间重复登陆。每次登录都需要输入用户名和密码。最近比较流行的就是OAuth。新浪微博这个开放系统做的就很好。但OAuth并非本文讨论范畴。这里主要讨论jQuery1.5 jsonp 在Asp.net MVC3 中的应用。
本文应用场景:
假设您的开发团队欲为某集团公司开发一整套信息管理系统,目前首要开发的就是一套订单系统和一套内部OA系统。前提是这两套系统使用同一套数据库。只是两个不同的MVC3.0 Web项目。也就是说会在同一个IIS上部署两个虚拟目录。 我们的目标是在不使用WCF、WebService 等技术实现跨域登录。也就是说用户用同一个帐号登录了订单系统,那么客户就可以直接登录OA系统。而不需要在OA系统上再输入一次用户名和密码。反之亦成立。
jQuery1.5 JSONP 使用:
在MVC3.0中建立JSONP专用ActionResult
代码如下:
JsonpResult 简单调用如下:
AppLogOn的action参数完全和上文中的jquery $.ajax 参数一致:
在信息系统开发的时,根据相关业务逻辑难免会多系统之间互相登录。一般情况下我们需要在多系统之间使用多个用户名和密码。这样客户就需要在多个系统之间重复登陆。每次登录都需要输入用户名和密码。最近比较流行的就是OAuth。新浪微博这个开放系统做的就很好。但OAuth并非本文讨论范畴。这里主要讨论jQuery1.5 jsonp 在Asp.net MVC3 中的应用。
本文应用场景:
假设您的开发团队欲为某集团公司开发一整套信息管理系统,目前首要开发的就是一套订单系统和一套内部OA系统。前提是这两套系统使用同一套数据库。只是两个不同的MVC3.0 Web项目。也就是说会在同一个IIS上部署两个虚拟目录。 我们的目标是在不使用WCF、WebService 等技术实现跨域登录。也就是说用户用同一个帐号登录了订单系统,那么客户就可以直接登录OA系统。而不需要在OA系统上再输入一次用户名和密码。反之亦成立。
jQuery1.5 JSONP 使用:
<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>
在MVC3.0中建立JSONP专用ActionResult
代码如下:
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 }
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。
相关文章推荐
- ASP.NET Core WebAPI 开发-新建WebAPI项目
- Spring基础知识(7)-Aspectj
- 在ASP.NET 2.0中操作数据之五十二:使用FileUpload上传文件
- asp.net web 开发登录相关操作的控件LoginName、LoginStatus和LoginView控件使用详解
- asp.net 微信支付 错误解决方案
- Spring AOP @AspectJ 入门基础
- 转载 asp.net的Request.ServerVariables参数说明
- 在ASP.NET 2.0中操作数据之五十一:从GridView的页脚插入新记录
- 在ASP.NET 2.0中操作数据之五十:为GridView控件添加Checkbox
- .Net中导出数据到Excel(asp.net和winform程序中)
- raspberry树莓派安装CUPS实现打印服务器共享HP P1007打印机
- C# ASP.NET FILEUPLOAD详解
- 在ASP.NET 2.0中操作数据之四十九:为GridView控件添加RadioButton
- 在ASP.NET 2.0中操作数据之四十八:对SqlDataSource控件使用开放式并发
- IdeaSpace安装
- asp.net4.5尚未在web服务器上注册 解决方案
- 利用记事本创建一个ASP.NET Core RC2 MVC应用
- 在ASP.NET 2.0中操作数据之四十八:对SqlDataSource控件使用开放式并发
- 在ASP.NET 2.0中操作数据之四十九:为GridView控件添加RadioButton
- 在ASP.NET 2.0中操作数据之五十:为GridView控件添加Checkbox