我编写了一个Servlet过滤器,试图从中获取自定义header = samlRequest的值,从其余的客户端/邮递员chrome插件中获取了samlRequest的值,但是使用ajax调用我提供了samlRequest键及其值,但是在java我在“ Access-Control-Request-Headers”中获得唯一的关键samlRequest,如何获取samlRequest的值。
$.ajax({
url: "http://indlin500.corp.test.com:31000/test/Portal/index.html",
type: "GET",
headers: { 'samlRequest': 'eJzVWVlz4roSfs6/oJhHJvECBkMRTsk2+2ow68stY8u2wBuWjQ2//srsyUlmJufOramTSjm41f '},
beforeSend: function(xhr){xhr.setRequestHeader('samlRequest', 'eJzVWVlz4roSfs6/oJhHJvECBkMRTsk2+2ow68stY8u2wBuWjQ2//srsyUlmJufOramTSjm41f ');},
success: function() { alert('Success!' + authHeader); }
});
FirewalledRequest [
weblogic.servlet.internal.ServletRequestImpl@4f839843 [选项
/testsOSS/Portal/index.html HTTP / 1.1连接:保持活动状态
访问控制请求方法:GET来源:http://10.19.121.17:7001
用户代理:Mozilla / 5.0(Windows NT 6.1; WOW64)AppleWebKit / 537.36
(KHTML,例如Gecko)Chrome / 55.0.2883.87 Safari / 537.36
访问控制请求标头:授权,samlrequest,
x-partnerkey接受:/ DNT:1推荐人:
http://10.19.121.17:7001/authentication-uxf-login-0.0.1-SNAPSHOT/customLoginPage.html接受编码:gzip,deflate,sdch接受语言:en-US,en; q = 0.8
]]
使用chrome rest客户插件,我在标题中得到samlRequest,其值与我提供的值相同。
FirewalledRequest [
weblogic.servlet.internal.ServletRequestImpl@24d746a [GET
/testOSS/Portal/index.html HTTP / 1.1连接:保持活动状态
缓存控制:无缓存saml请求:eJzVWVlz4roSfs6 / oJhHJvECBkMRTsk2 + 2ow68stY8u2wBuWjQ2 // srsyUlmJufOramTSjm41f用户代理:Mozilla / 5.0
(Windows NT 6.1; WOW64)AppleWebKit / 537.36(KHTML,如Gecko)
Chrome / 55.0.2883.87 Safari / 537.36邮递员令牌:
ce7765d0-94b5-a1e1-d6ba-2abada3dfdd6接受:/ DNT:1
接受编码:gzip,deflate,sdch接受语言:en-US,en; q = 0.8
]]
最佳答案
当您从浏览器发出跨域请求时,浏览器会在实际请求之前发出预检请求。与预期的GET请求不同,这是一个OPTIONS请求。
尝试在实际过滤器之前添加CORS过滤器,该过滤器将针对任何OPTIONS请求回复OK。示例代码可以在这里找到:
https://amodernstory.com/2014/12/27/using-cors-headers-with-java-example/
顺便说一句,您不需要在请求中设置标头两次。您可以从ajax请求中删除beforeSend块。