Jer*_*Jer 8 jetty embedded-jetty cors http-options-method preflight
我正在开发一个使用嵌入式Jetty的项目(不幸的是我只是"继承"了项目的服务器端,并且对Jetty及其配置的使用不是很熟悉).
刚出现一个奇怪的案例 - 我会尽力描述:
基于Web的UI(使用AngularJS,来自不同的域,因此使用CORS)发送POST请求以更改服务器上某些内容的状态.这在过去的某个时刻起作用(它可能是大约一个月前使用过的).
昨天这停止了工作.检查REST调用,我看到首先发出OPTIONS请求.POST的内容类型是application/json,所以基于我读过的内容,这是正确的.我不确定为什么之前没有发送过 - 有可能该公司最近更新了Chrome版本,旧版本没有发送预检请求,但这只是猜测.在任何情况下,我认为这是我的应用程序中为JetS配置CORS的相关代码:
FilterHolder holder = new FilterHolder(new CrossOriginFilter());
holder.setInitParameter(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, "*");
holder.setInitParameter(CrossOriginFilter.ACCESS_CONTROL_ALLOW_CREDENTIALS_HEADER, "true");
appHandler.addFilter(holder, "/*", EnumSet.of(DispatcherType.REQUEST));
Run Code Online (Sandbox Code Playgroud)
一切都适用于POST请求.我可以通过使用--disable-web-security标志启动Chrome来验证这一点.没有发送OPTIONS请求,并且POST正常工作.
我的想法是,因为它适用于POST,它不是授权或安全问题 - 它只是没有正确配置Jetty来处理预检请求(它只返回401).
我找不到很多关于嵌入式Jetty的文档,以及哪些CrossOriginFilter常量在调用setInitParameter时用作属性键(而且,因为该方法调用的第二个参数是一个String,我真的不知道如何格式化值).
我应该在CrossOriginFilter上设置哪些参数来处理OPTIONS请求?如果我上面说过任何错误或做出任何错误的假设,请纠正我!我对这方面的经验非常有限.
CrossOriginFilter的文档:
http://www.eclipse.org/jetty/documentation/current/cross-origin-filter.html
适用于CrossOriginFilter的Javadoc:
http://download.eclipse.org/jetty/stable-9/apidocs/org/eclipse/jetty/servlets/CrossOriginFilter.html
实际的源代码:(有时这也可以帮助人们理解):
简而言之,您可能希望将OPTIONS添加到允许的方法中。
(就像javadoc所说的那样)
FilterHolder holder = new FilterHolder(new CrossOriginFilter());
holder.setInitParameter(CrossOriginFilter.ALLOWED_METHODS_PARAM, "GET,POST,HEAD,OPTIONS");
appHandler.addFilter(holder, "/*", EnumSet.of(DispatcherType.REQUEST));
Run Code Online (Sandbox Code Playgroud)
现在,要解决您遇到的另一个错误...
这无能为力...
holder.setInitParameter(CrossOriginFilter.ACCESS_CONTROL_ALLOW_CREDENTIALS_HEADER,
"true");
Run Code Online (Sandbox Code Playgroud)
那不是一个初始化参数键。(实际上,这是的标头名称常量Access-Control-Allow-Credentials),如果您想允许凭据,请按照javadoc的说明进行操作。
holder.setInitParameter(CrossOriginFilter.ALLOW_CREDENTIALS_PARAM, "true");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7913 次 |
| 最近记录: |