问题:由于项目实现需要单点登录(SSO)功能,passport服务器与各个应用服务器不在同一个域中,当用户登录了某一台应用服务器,则在访问其他应用时,不需要用户进行再次登录。
解决方案:passport服务器在用户浏览器中保存了登录cookie,当用户请求登录passport服务器时,passport服务器读取该cookie来判断是否需要用户输入用户名、口令来登录。
上述代码data为null
data仍然为空
返回值了
解决方案: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可以跨域来返回结果,其他的都不能返回结果
本文探讨了在不同应用服务器间实现单点登录(SSO)时,面对跨域挑战的解决策略,包括如何利用passport服务器的登录cookie在用户请求时自动判断登录状态,并通过AJAX方法(get、getJSON、getScript)跨域获取登录信息。

396

被折叠的 条评论
为什么被折叠?



