如何在 CAS 单点登录环境下发送 Ajax 请求?
时间: 2014-02-09来源:开源中国
前景提要
HDC调试需求开发(15万预算),能者速来!>>>
我已成功大家 CAS 单点登录服务器(简称 CAS),地址为: https://cas
有两个应用,已经它们集成在单点登录环境中,它们是: REST Server,地址为:http://rest-server REST Client,地址为:http://rest-client
当进入 REST Client 时,发送请求: http://rest-client/product.html
由于没有认证,所以该请求将会被重定向到 CAS 上,此时请求为:https://cas/login?service= http://rest-client/product.html
重定向到 CAS 的登录页面,输入用户名与密码,CAS 判断认证成功后,将请求重定向到: http://rest-client/product.html
此时,在 product.html 页面中,通过一个 jQuery Ajax 请求去获取 REST Server 上的数据,代码如下: $.ajax({ url: 'http://rest-server/ws/rest/ProductService/products', // 注意这个 URL success: function(data) { // data 是一个 JSON 数据,可渲染到 DOM 上 } });
此时,发现 Ajax 请求出现问题,Status Code 为 302 Found。
如果直接在浏览器地址栏上发送这个 URL,再次刷新页面,就可以获取 JSON 数据。
目前我的解决方案不太优雅,使用了一个 iframe 来发送这个 URL,代码如下: $.ajaxSetup({ error: function(jqXHR, textStatus, errorThrown) { if (textStatus == 'error' && errorThrown == '') { if (jqXHR.status == 0 || jqXHR.status == 12017) { var $iframe = $('<iframe/>', { src: url, style: 'display: none;' }); $iframe.appendTo('body'); $iframe.load(function() { location.reload(); }); } } } });
当发现 Ajax 错误时,需要定位到这种错误类型,然后动态生成一个隐藏的 iframe,在这个 iframe 里发送这个 URL,并监听了 iframe 加载完毕的事件,当加载完毕后,自动刷新页面,这样一来 Ajax 请求才能正确获取 REST Server 端的数据。
注意:该示例中用到了 Ajax 跨域,我使用的是 CORS 解决方案,即在 REST Server 端指定的 origin 为 REST Client 的地址。
我的问题是,如何解决在 CAS 单点登录环境下发送 Ajax 请求?

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行