我正在尝试在WebSphere Liberty Profile 8.5.5.9中使用新的CORS功能。我认为我已经正确设置了它,但它根本不起作用,所以我可能会错误地配置它。日志中没有任何内容可以是这样或那样的 - 没有错误或信息性消息。
是否有一些我可以打开的痕迹可以向我展示有关CORS功能的任何信息,以及可能为什么它不起作用?
这是我们的配置:
<cors domain="/TalentPlayBookService/rest" allowedOrigins="https://w3dev.somerslab.ibm.com/"
allowedMethods="GET, HEAD, POST, PUT"
allowedHeaders="Referer, Cache-Control, Pragma, Accept, Accept-Language, Accept-Encoding, Accept-Charset, Content-Type, Content-Length, User-Agent, Authorization, passwd, X-Update-Nonce, X-Shindig-ST, X-IC-CRE-Request-Origin, X-IC-CRE-User, X-LConn-Auth, Accept*, Content*"
exposeHeaders="Content-Type, Last-Modified, etag"
allowCredentials="true" maxAge="3600" />
答案 0 :(得分:1)
以下跟踪设置将激活CORS日志记录:
<logging traceSpecification="CorsService=finest"/>
你应该看到&#34; handleRequest&#34;来自CorsRequestInterceptor的方法调用。
修改强>: 如果你看到来自&#34; isCorsSupportEnabled&#34;的痕迹。回归真实,这意味着您的CORS配置正在被提升。但是,如果您没有从&#34; logCorsRequestInfo&#34;中看到跟踪条目。这意味着客户端调用未指定名为&#34; Origin&#34;的必需标头。
我建议您在浏览器上执行F12,以查看传出标头/来源等是否符合预期。具体来说,如果&#34; Origin&#34;标头正在从客户端传递。
编辑#2 Liberty的CORS拦截器处于过滤级别,因此将其视为适用于您使用server.xml中的cors元素配置的所有域(应用程序)的过滤器。这意味着当前的CORS支持不会处理未到达过滤层的请求,例如您在其他答案中提到的401。这是已知的限制,正在考虑将来的要求。
答案 1 :(得分:0)
所以我想我知道问题是什么。在以前的项目中,在较旧版本的WLP上,我们需要为应用程序创建一个CORS过滤器。但是,我们使用BasicAuth,并在返回401时遇到问题,因为响应没有正确的CORS头。由于我们的CORS过滤器是在应用程序级别指定的,并且WLP本身正在发送回401,因此我们的过滤器永远不会被解雇。所以我们最终需要在它们之间安装AjaxProxy服务。
使用WLP 8.5.5.9和CORS功能,我做了一个错误的假设,因为该功能是在服务器级配置的,而不是在应用程序中,它能够处理这样的情况,其中如果用户尚未获得授权,WLP将使用401进行响应。看来情况并非如此。似乎此功能不能处理不是来自应用程序本身的401。
所以我想我过高估计了CORS功能的功能。