在咱们作的这个项目中充分利用jsonp跨域这一个特性,完成了简单的单点登陆功能和权限统一认证控制,实现思路并不复杂同各类实现单点登陆的产品相比能够说微不足道,各有各的好处、各有各的优势,选择什么方式实现彻底取决于咱们本身或者项目经理的开发经验,对各类框架的理解程度每每决定了目前开发项目的总体架构。javascript
这不是一项凭空产生的新东西,仅仅是JS的一个特性而已以前没有被咱们说起也没有被咱们注意到原来常用的js还能够跨域呢,觉的咱们对已经学过的东西理解还不是不够深刻、有些肤浅,JS绝大多数在浏览器中运行完成各类动态效果,开发js的人一开始应该就考虑到了浏览器的特性,为了避免受浏览器的限制而将js赋予了这一个神圣的职责,浏览器的限制是安全策略里面的一个策略,叫同源策略。
html
同源策略java
同源的意思是协议、域名、端口都相同,只要有一个不相同那么就是不一样源的访问地址,一个浏览器的一个页面中是不能够从不一样源的地址获取数据的,当每次页面加载时浏览器都会自动判断获取的数据是否来自一个源地址,若是不是会受到浏览器的阻止。jquery
好像会议的安检同样,只容许某一类有通行证的人进入,其余的则不会让进入阻止在外面,而js有一个特性能够跨过安检经过特殊途径进入不受阻止。
ajax
解决同源策略问题jsonp
Jsonp(JSON with Padding)是资料格式 json 的一种“使用模式”,可让网页从别的网域获取资料。json
之因此叫jsonp能够理解为主要做用和目的就是从别的网域获取json格式数据,这是它的主要应用方面,其它的做用暂时没有用到。
跨域
原理浏览器
原理也很容易理解,它之因此能够跨域是利用了script标签的跨域能力,试想?你有没有想过常常引入的一个普通js文件,它是怎么样加载到页面中去的为何它的src属性写上一个地址就能够把别处的js文件加载到页面上呢,经测试这个src属性能够填写任意有效的地址,即便不在同一个项目目录结构中的文件也是能够的。tomcat
例如这个连接;
安全
<span style="font-size:14px;"><script type="text/javascript" src="_js/jquery-2.0.0.min.js"></script></span>
<span style="font-size:14px;"> <script type="text/javascript"> function getjson(json) { alert("经过src属性得到json="+json.result); } </script> <script type="text/javascript" src="http://localhost:28080/application1/login.do?method=loginInterface&callback=getjson&name=lilongsheng"></script></span>
<span style="font-size:14px;"> public ActionForward loginInterface(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { /** 判断是否登陆成功 */ boolean isLogin = false; //从用URL中获取用户名和密码 String name=request.getParameter("name"); String pwd=request.getParameter("pwd"); try { //回调函数名 String callbackFunName = request.getParameter("callback"); //利用jsonp包装的json数据 String data = callbackFunName + "({\"result\":\"" + name + "\"})"; System.out.println(data); //返回到界面 print(data,request,response); } catch (Exception e) { e.printStackTrace(); } return null; }</span>
从上面能够看出经过script标签能够从不一样源的地方得到json数据。
咱们再来看看jquery是如何使用的,仅仅在方法中加入一个参数就能够实现,感受简单了不少,这是由于框架已经为咱们封装好了里面的一些细节调用关系,只要咱们设置了参数它就支持跨域访问,调用以下:
<span style="font-size:14px;"> function getJsonp() { var name=$("#name").val(); var pwd=$("#pwd").val(); $.ajax({ url:"http://localhost:28080/application1/login.do?method=loginInterface&name="+name+"&pwd="+pwd, type:"post", dataType:"jsonp", jsonp : 'callback', success:function(data){ alert(data.result); }, error:function(){ alert("网络链接失败!"); } }); }</span>
关于jsonp的如何应用已经录了一集视频,下面是下载地址
jsonp视频演示下载地址:http://pan.baidu.com/s/1dDIjnTR