Chinaunix首页 | 论坛 | 博客
  • 博客访问: 263117
  • 博文数量: 34
  • 博客积分: 569
  • 博客等级: 中士
  • 技术积分: 380
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-10 14:10
文章分类

全部博文(34)

文章存档

2016年(6)

2014年(1)

2013年(5)

2012年(22)

我的朋友

分类: 系统运维

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,可以验证了。

阅读(1781) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~