单点登陆(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只须要登陆一次就能够访问全部相互信任的应用系统。java
在作单点登陆以前观察了不少网站,好比微软中国登陆跳转到微软美国统一登陆页面再跳转过来,淘宝天猫登陆,京东登陆。json
登陆成功以后经过 url带token参数跳转 好比阿里云登陆万网的方式跨域
在js里获取登陆服务器的token安全
jQuery.getScript("http://localhost:8081",function(){console.log(token);});
登陆成功以后 跳转到 (一站登陆把全站都登陆上)服务器
<script src='b.com/login?uid=xxxx&token=xxxxx'></script> <script src='c.com/login?uid=xxxx&token=xxxxx'></script>
登陆成功以后 跳转到 (一站登陆把全站都登陆上)
session
<iframe src="http://www.baidu.com"/>
思路:app
好比A应用 使用 公共SSO登陆 框架
A应用先判断自个session是否为空,为空再用方法2js跨域获取SSO的信息,获取到以后再调用 A应用本身存session方法,登陆成功刷新。jsonp
在整个过程考虑一下安全问题就能够了。 网站
以上的几种方式是我本身整理不须要加入复杂比较重的框架的简单SSO实现
用以上的方法必须设置SSO服务端容许跨域
/** * 公共获取是否登陆 * @param * @param httpSessionl * @return */ @RequestMapping(value = "/checklogin") @ResponseBody public String login(HttpSession httpSessionl, HttpServletResponse response){ response.setHeader("Access-Control-Allow-Origin", "*");//容许全部域名可访问 解决跨域问题 response.setHeader("P3P","CP=IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT");//解决IE跨域问题 Object token1= httpSessionl.getAttribute("token"); if(token1!=null){ return "var isLogin=true;var token='"+token1+"';"; //script调用 返回json格式的数据 }else{ return "var isLogin=false"; } }
除了 script方式 还有一种jsonp请求方式 这里就不作介绍,有兴趣去搜索一下