我编写了一个servlet过滤器,其中我试图获取自定义头= 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连接:keep-alive 访问控制请求方法:GET原点:http://10.19.121.17:7001 User-Agent: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 Referer: http://10.19.121.17:7001/authentication-uxf-login-0.0.1-SNAPSHOT/customLoginPage.html接受编码:gzip,deflate,sdch Accept-Language:en-US,en; q = 0.8 ]
使用chrome rest客户端插件我在标题中获得了samlRequest,并提供了我提供的值。
FirewalledRequest [ weblogic.servlet.internal.ServletRequestImpl@24d746a [GET /testOSS/Portal/index.html HTTP / 1.1连接:keep-alive Cache-Control:no-cache samlRequest:eJzVWVlz4roSfs6 / oJhHJvECBkMRTsk2 + 2ow68stY8u2wBuWjQ2 // srsyUlmJufOramTSjm41f User-Agent:Mozilla / 5.0 (Windows NT 6.1; WOW64)AppleWebKit / 537.36(KHTML,与Gecko一样) Chrome / 55.0.2883.87 Safari / 537.36 Postman-Token: ce7765d0-94b5-a1e1-d6ba-2abada3dfdd6接受: / DNT:1 Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en; q = 0.8
]]
答案 0 :(得分:1)
当您从浏览器发出跨源请求时,浏览器会在实际请求之前发出预检请求。这是一个 OPTIONS 请求,与预期的GET请求不同。
尝试在实际过滤器之前添加CORS过滤器,该过滤器将对任何OPTIONS请求回复OK。可在此处找到示例代码:
https://amodernstory.com/2014/12/27/using-cors-headers-with-java-example/
顺便说一下,您不需要在请求中设置两次标头。您可以从ajax请求中删除beforeSend块。