我正在开发dropwizard应用程序和js ui,以便与api交互。我需要加载json数据来更新视图,但在此之前,我必须在dropwizard中启用cors。我做了一些工作人员,但它似乎不起作用,因为dropwizard始终不返回任何内容。
@Override
public void run(final BGConfiguration configuration, final Environment environment) throws Exception {
final Map<String, String> params = new HashMap<>();
params.put("Access-Control-Allow-Origin", "/*");
params.put("Access-Control-Allow-Credentials", "true");
params.put("Access-Control-Expose-Headers", "true");
params.put("Access-Control-Allow-Headers", "Content-Type, X-Requested-With");
params.put("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
environment.servlets().addFilter("cors", CrossOriginFilter.class).setInitParameters(params);
}
对我来说,即使在配置了上述功能之后,它也不起作用。最终证明,我还必须允许缓存控制头。
filter.setInitParameter("allowedHeaders",
"Cache-Control,If-Modified-Since,Pragma,Content-Type,Authorization,X-Requested-With,Content-Length,Accept,Origin");
迈克·克拉克的回答补充道:
将CHAIN_PREFLIGHT_PARAM
设置为false将允许此过滤器处理预飞行请求,而无需身份验证过滤器拦截200
响应并将其转换为未经授权/禁止的响应。
import org.eclipse.jetty.servlets.CrossOriginFilter;
import javax.servlet.DispatcherType;
import java.util.EnumSet;
public void run(Configuration conf, Environment environment) {
// Enable CORS headers
final FilterRegistration.Dynamic cors =
environment.servlets().addFilter("CORS", CrossOriginFilter.class);
// Configure CORS parameters
cors.setInitParameter("allowedOrigins", "*");
cors.setInitParameter("allowedHeaders", "X-Requested-With,Content-Type,Accept,Origin");
cors.setInitParameter("allowedMethods", "OPTIONS,GET,PUT,POST,DELETE,HEAD");
// Add URL mapping
cors.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, "/*");
// DO NOT pass a preflight request to down-stream auth filters
// unauthenticated preflight requests should be permitted by spec
cors.setInitParameter(CrossOriginFilter.CHAIN_PREFLIGHT_PARAM, Boolean.FALSE.toString());
}
我感到惊讶的是,我在互联网站上没有找到任何包含此配置的示例。花了几天时间想弄明白这一点。
这里的错误在于过滤器没有通过addMappingForUrlPatterns
方法配置URL路径。
这对我使用dropwizard 0.7.1很有效:
import org.eclipse.jetty.servlets.CrossOriginFilter;
import javax.servlet.DispatcherType;
import java.util.EnumSet;
public void run(Configuration conf, Environment environment) {
// Enable CORS headers
final FilterRegistration.Dynamic cors =
environment.servlets().addFilter("CORS", CrossOriginFilter.class);
// Configure CORS parameters
cors.setInitParameter("allowedOrigins", "*");
cors.setInitParameter("allowedHeaders", "X-Requested-With,Content-Type,Accept,Origin");
cors.setInitParameter("allowedMethods", "OPTIONS,GET,PUT,POST,DELETE,HEAD");
// Add URL mapping
cors.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, "/*");
}
我假设您正在浏览器中进行实时测试,但您可以通过CLI使用如下curl命令进行验证:
$ curl -H "Origin: http://example.com" \
-H "Access-Control-Request-Method: POST" \
-H "Access-Control-Request-Headers: X-Requested-With" \
-X OPTIONS --verbose \
http://localhost:8080
您应该在响应中看到一堆访问控制-*
HTTP头。
我已经有效地使用 wiremock 一段时间了,我想启用 CORS 对模拟 API 的访问。 我尝试在响应标头中设置访问控制允许来源:* 和其他标头,但都无济于事。 这是我的一个映射示例: 我到底做错了什么导致CORS无法工作? 提前谢谢。
这里使用Ajax:
问题内容: 我的Django版本是1.8.6。我已将corsheaders文件夹复制到项目文件夹中。我已经点安装django-cors-headers(ver 1.1.0)。这是我的setting.py: 这是我的jQuery: 在执行getLeague()时,它会不断提醒“失败”。当我看到控制台时,它显示“ XMLHttpRequest无法加载http://otherdomain.ashx?us
所以,基本上,前端使用reactJS,后端Spring Boot(微服务,zuul充当网关),当然,如果没有CORS的东西,他们什么也做不了。 我们使用了这段代码 它起作用了,但不再起作用了。我正在使用Postman检查发送回来的标头,但这些都不在那里。 我该怎么办?我可以在每个微服务中使用一个简单的CORS过滤器,但让Zuul处理这一切会容易得多。因为无论如何所有请求都会通过它。 有什么建议吗?
如何在Spring5WebFlux项目中启用CORS? 我找不到合适的留档。
问题内容: 我已经使用SLIM PHP框架创建了一个基本的RESTful服务,现在我正尝试将其连接起来,以便可以从Angular.js项目访问该服务。我已经了解到Angular开箱即用地支持CORS,而我要做的就是在我的.htaccess文件中添加以下行: 我已经做到了,我的REST应用程序仍然可以正常工作(.htaccess错误导致500个内部服务器没有错误),但是当我尝试从test- cors