问题描述
我正在使用cas 5.x。
我有cas-server
和两个网络应用程序client-1
和client-2
。
如果我直接从client-2
的浏览器地址栏中访问step 2
的受保护资源,则它起作用。
我的ajax调用是:
//test() is in client-1
function test() {
jQuery.ajax({
url:"http://192.168.0.14:8445/client-2/user/userInfo",headers: {'X-Requested-With': 'XMLHttpRequest'},success: function(res) {
//...
}
});
}
解决方法
根据pac4j文档,
使用间接客户端时,如果用户尝试访问受保护的URL,则请求将被重定向到身份提供者进行登录。但是,如果传入的HTTP请求是AJAX请求,则不会执行重定向,并且将返回401错误页面。
所以您看到的是预期的行为。
接下来,如果X-Requested-With
标头的值为XMLHttpRequest
或is_ajax_request
参数或标头为true
,则认为HTTP请求是AJAX请求。这是处理/检测AJAX请求时的默认行为/条件,默认情况下,pac4j将仅计算重定向URL并将其添加为标头(假设间接客户端将addRedirectionUrlAsHeader
设置为true)返回401 http状态。
ajax无法处理重定向导致此问题
它不是为处理重定向而设计的。您需要在AJAX调用中捕获401,从传递回给您的标头中获取重定向URL,然后自动进行重定向,或者执行其他对您的应用程序正确行为的活动/动作(显示消息,重定向到另一个URL等)。