分类: 系统运维
2012-08-22 16:09:58
单点登录服务器(sso服务器)
令牌认证服务器(令牌服务器)
登录网页项目的时候,由于使用了单点登录,所以页面会跳转到sso服务器,进行统一登录,
现在需要在该界面增加令牌的认证,但是SSO服务器和令牌服务器部署在不同的服务器,且暂时没有要合并的可能,所以在SSO登录的时候必须要对令牌进行验证,就必须涉及到了跨域访问的问题。
最开始不了解跨域的概念,以为在局域网中就没有跨域,毕竟对外的域名都是统一的,所以直接使用
js代码 at SSO服务器
$.ajax({
url :,
type :"POST",
data : {"name":name,"code":code},
success :function(data){
alert(data);
}
});
action代码 at 令牌服务器端
<%
Stringresult=request.getAttribute("result")==null?“”:request.getAttribute("result").toString();
String json="{result:"+result+"}";
response.getWriter().write(json);
%>
结果发现SSO服务器访问URL后的返回值的空值,但是本地实测返回肯定是有值的,猜测是防火墙问题,网段问题等等,最后终于在别人的提醒下,发现是因为跨域了。
查询了Jquery的相关API,修改如下
js代码 at SSO服务器
$.ajax({
url:urls,
type: "GET",
dataType: "jsonp",
jsonp: "jsonpCallback",
crossDomain : true,
data: {“name”:name,“code”:code},
success: function (data){
var result = data.results;
var msg = result?"成功":"失败,请重新输入6位令牌数字";
$("#verify").html("动态口令验证"+msg);
},
error: function(xhr){
alert("请求出错(请检查相关度网络状况.)");
}
});
action代码 at 令牌服务器端
<%
Stringresult=request.getAttribute("result")==null?“”:request.getAttribute("result").toString();
String callback = request.getParameter("jsonpCallback")+"({\"results\":"+results+"})";
response.getWriter().write(callback);
%>
飘红的两处命名必须相同。
最终结果OK,可以验证了。