如何在 Jersey 中使用 ContainerResponseFilter 允许 CORS 的多个域。?

Posted

技术标签:

【中文标题】如何在 Jersey 中使用 ContainerResponseFilter 允许 CORS 的多个域。?【英文标题】:How to allow multiple domains for CORS with ContainerResponseFilter in Jersy.? 【发布时间】:2017-11-23 04:12:24 【问题描述】:

我正在使用 JAX-RS jersey 实现来实现 RESTful Web 服务。 我想允许多个域访问我的网络服务,但不是全部。 目前我已经编写了下面的代码,只允许一个域用于 CORS。 谁能解释我如何在泽西岛实现中允许特定的多个域。?

public class CORSResponseFilter implements ContainerResponseFilter 

    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException 

        MultivaluedMap<String, Object> headers = responseContext.getHeaders();
        headers.add("Access-Control-Allow-Origin", "www.xxxxx.com");
        headers.add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");          
        headers.add("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, X-Codingpedia");
    

【问题讨论】:

【参考方案1】:

动态设置标头值。有一个您想要允许的预定义来源列表。在 filter 方法中,从请求上下文中获取 Origin 标头。这将具有请求的原始域。对照允许的来源列表进行检查。如果它在列表中,则将 Origin 标头中的域作为允许的来源。如果它不在那里,抛出一个ForbiddenException 说来源是不允许的。

【讨论】:

以上是关于如何在 Jersey 中使用 ContainerResponseFilter 允许 CORS 的多个域。?的主要内容,如果未能解决你的问题,请参考以下文章

在 Jersey 生命周期中如何拦截请求?

如何在内存中进行单元测试 Spring-Jersey

如何在 Jersey 中使用 ContainerResponseFilter 允许 CORS 的多个域。?

如何在 Jersey 2.x 中返回对象

如何在 Jersey Invocation Builder 中使用 PATCH 方法?

如何使用 Jersey JSON POJO 支持?