jquery 跨域 调用服务器js 单点登录 SSO

来源:互联网 发布:win10仿mac主题 编辑:程序博客网 时间:2024/05/17 04:15
问题:由于项目实现需要单点登录(SSO)功能,passport服务器与各个应用服务器不在同一个域中,当用户登录了某一台应用服务器,则在访问其他应用时,不需要用户进行再次登录。
解决方案:passport服务器在用户浏览器中保存了登录cookie,当用户请求登录passport服务器时,passport服务器读取该cookie来判断是否需要用户输入用户名、口令来登录。

遇到的问题,由于各个应用服务器无法读取passport服务器的cookie,所以判断用户是否登录只能由passport服务器来完成。

服务器代码

                response.setContentType("text/plain");Writer w = response.getWriter();if (Context.getCurrentUser(request.getSession())!=null){w.write("var data = {result:\"true\"}");}else{w.write("var data = {result:\"false\"}");}w.flush();w.close();


代码1

$.get("${passport_server}/isLogin.do",function(data){   altert(data.result);});

上述代码data为null

代码2

$.getJSON("${passport_server}/isLogin.do",function(data){ alert(data.result);});

data仍然为空

代码3

$.getScript("${passport_server}/isLogin.do",function(data){    alert(data.result);});

返回值了

究其原因,jquery的get、getJSON和getScript都是由ajax这方法来实现,不同的是getScript是返回服务器上的js代码并执行,其他的都是返回json格式等结果,只有getScript可以跨域来返回结果,其他的都不能返回结果