如何在 Undertow 中启用 Access-Control-Allow-Origin?
How to enable Access-Control-Allow-Origin in Undertow?
尝试 1
builder.setHandler(new HttpHandler() {
@Override
public void handleRequest(final HttpServerExchange exchange) throws Exception {
exchange.getResponseHeaders().put(new HttpString("Access-Control-Allow-Origin"), "*");
exchange.getResponseHeaders().put(new HttpString("Access-Control-Allow-Methods"),
"GET, POST, PUT, DELETE, OPTIONS");
String ss = exchange.getResponseHeaders().get(new HttpString("Access-Control-Allow-Headers"))
.getFirst();
System.out.println(ss);
exchange.getResponseHeaders().put(new HttpString("Access-Control-Allow-Headers"), ss);
}
});
尝试 2
HttpHandler enHandler = new SetHeaderHandler("Access-Control-Allow-Origin", "*");
builder.setHandler(enHandler);
我尝试了上述设置以在我的 undertow 服务中启用 CORS,但它不适用于我的 angular UI。在邮递员中工作正常。
添加这些行后就可以工作了
ResteasyDeployment rd = new ResteasyDeployment();
CorsFilter filter = new CorsFilter();
filter.setAllowedMethods("GET,POST,PUT,DELETE,OPTIONS");
filter.getAllowedOrigins().add("*");
rd.setProviderFactory(new ResteasyProviderFactory());
rd.getProviderFactory().register(filter);
我最近遇到了与 Undertow 服务器添加 Access-Control-Allow-Origin header.
的能力相同的问题
虽然不是很方便,但我可以在 HttpHandler.handleRequest 方法中设置 header :
httpServerExchange.getResponseHeaders()
.put(new HttpString("Access-Control-Allow-Origin"), "*");
如UNDERTOW-1376, the Undertow community seems to suggest using either undertow-cors-filter or cors-filter中描述的社区开发的解决方案。
当未经身份验证的请求访问受保护的资源时,基于 Servlet 的过滤器将没有机会拦截此类发送 CORS header 的请求。因此,任何基于 servlet 的过滤器可能都不适合此类要求。
此外,undertow-cors-filter 似乎未更新且无法正常工作(当我尝试使用 Wildfly 15 时)。它因正则表达式相关错误而失败。
可以使用 Undertow 谓词和交换属性在 Wildfly 中实现 CORS 过滤器功能。正则表达式可用于定义要列入白名单的域列表。 CORS 相关的响应 header 可以通过检查传入的 Origin header 并使用正则表达式匹配将其与白名单进行比较来有条件地写入。所有这些都可以在 Wildfly 的 standalone.xml 中配置,无需任何 Java 编码。以下文章解释相同。
https://medium.com/amritatech/a-mechanism-to-enable-cors-filter-with-no-coding-57ef2906e023
尝试 1
builder.setHandler(new HttpHandler() {
@Override
public void handleRequest(final HttpServerExchange exchange) throws Exception {
exchange.getResponseHeaders().put(new HttpString("Access-Control-Allow-Origin"), "*");
exchange.getResponseHeaders().put(new HttpString("Access-Control-Allow-Methods"),
"GET, POST, PUT, DELETE, OPTIONS");
String ss = exchange.getResponseHeaders().get(new HttpString("Access-Control-Allow-Headers"))
.getFirst();
System.out.println(ss);
exchange.getResponseHeaders().put(new HttpString("Access-Control-Allow-Headers"), ss);
}
});
尝试 2
HttpHandler enHandler = new SetHeaderHandler("Access-Control-Allow-Origin", "*");
builder.setHandler(enHandler);
我尝试了上述设置以在我的 undertow 服务中启用 CORS,但它不适用于我的 angular UI。在邮递员中工作正常。
添加这些行后就可以工作了
ResteasyDeployment rd = new ResteasyDeployment();
CorsFilter filter = new CorsFilter();
filter.setAllowedMethods("GET,POST,PUT,DELETE,OPTIONS");
filter.getAllowedOrigins().add("*");
rd.setProviderFactory(new ResteasyProviderFactory());
rd.getProviderFactory().register(filter);
我最近遇到了与 Undertow 服务器添加 Access-Control-Allow-Origin header.
的能力相同的问题虽然不是很方便,但我可以在 HttpHandler.handleRequest 方法中设置 header :
httpServerExchange.getResponseHeaders()
.put(new HttpString("Access-Control-Allow-Origin"), "*");
如UNDERTOW-1376, the Undertow community seems to suggest using either undertow-cors-filter or cors-filter中描述的社区开发的解决方案。
当未经身份验证的请求访问受保护的资源时,基于 Servlet 的过滤器将没有机会拦截此类发送 CORS header 的请求。因此,任何基于 servlet 的过滤器可能都不适合此类要求。
此外,undertow-cors-filter 似乎未更新且无法正常工作(当我尝试使用 Wildfly 15 时)。它因正则表达式相关错误而失败。
可以使用 Undertow 谓词和交换属性在 Wildfly 中实现 CORS 过滤器功能。正则表达式可用于定义要列入白名单的域列表。 CORS 相关的响应 header 可以通过检查传入的 Origin header 并使用正则表达式匹配将其与白名单进行比较来有条件地写入。所有这些都可以在 Wildfly 的 standalone.xml 中配置,无需任何 Java 编码。以下文章解释相同。
https://medium.com/amritatech/a-mechanism-to-enable-cors-filter-with-no-coding-57ef2906e023