如何在Undertow中启用Access-Control-Allow-Origin?

时间:2017-02-06 11:36:58

标签: java angularjs cors 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);

我尝试了以上设置以在我的下载服务中启用CORS,但它无法使用我的角度UI。邮递员工作得很好。

3 个答案:

答案 0 :(得分:1)

添加这些行

后可以正常工作
        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);

答案 1 :(得分:0)

我最近在Undertow服务器添加 Access-Control-Allow-Origin 标头的功能方面遇到了同样的问题。

虽然不是很方便,但我可以在 HttpHandler.handleRequest 方法中设置标头,如下所示:

httpServerExchange.getResponseHeaders()
                .put(new HttpString("Access-Control-Allow-Origin"), "*");

UNDERTOW-1376中所述,Undertow社区似乎建议使用undertow-cors-filtercors-filter作为社区开发的解决方案。

答案 2 :(得分:0)

当未经身份验证的请求访问受保护资源时,基于 Servlet 的过滤器将没有机会拦截此类发送 CORS 标头的请求。因此,任何基于 servlet 的过滤器可能都不适合此类需求。

此外,undertow-cors-filter 似乎未更新且无法正常工作(当我尝试使用 Wildfly 15 时)。它因正则表达式相关错误而失败。

CORS 过滤器功能可以在 Wildfly 中使用 Undertow 谓词和交换属性来实现。正则表达式可用于定义要列入白名单的域列表。并且可以通过检查传入的 Origin 标头并使用正则表达式匹配将其与白名单进行比较来有条件地写入 CORS 相关的响应标头。所有这些都可以在 Wildfly 的 standalone.xml 中配置,无需任何 Java 编码。下面的文章解释了相同的内容。

https://medium.com/amritatech/a-mechanism-to-enable-cors-filter-with-no-coding-57ef2906e023