【问题标题】:ContainerResponseFilter not workingContainerResponseFilter 不工作
【发布时间】:2014-08-31 10:37:26
【问题描述】:

在带有 REST 服务的 wildfly 8.1 中,我想实现 CORS ContainerRequestFilter 和 ContainerResponseFilter。

我的请求过滤器工作正常,但 ContainerResponseFilter 从未被加载或调用

package org.test.rest;

import java.io.IOException;

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.container.PreMatching;
import javax.ws.rs.ext.Provider;

@Provider 
@PreMatching // <-- EDIT : This was my mistake ! DO NOT ADD THIS
public class CorsResponseFilter implements ContainerResponseFilter {
    public CorsResponseFilter() {
        System.out.println("CorsResponseFilter.init");
    }

    @Override
    public void filter(ContainerRequestContext req,
            ContainerResponseContext resp) throws IOException {
        System.out.println("CorsResponseFilter.filter");
        resp.getHeaders().add("Access-Control-Allow-Origin", "*");
        resp.getHeaders().add("Access-Control-Allow-Credentials", "true");
        resp.getHeaders().add("Access-Control-Allow-Methods",
                "GET, POST, DELETE, PUT");
        resp.getHeaders().add("Access-Control-Allow-Headers",
                "Content-Type, Accept");
    }

}

在我看来,这是一个 Wildfly / resteasy 错误。你有其他想法/我错过了什么吗?

【问题讨论】:

    标签: resteasy wildfly-8


    【解决方案1】:

    您在问题中混合了ContainerRequestFilterContainerResponseFilter。当您想向客户端发送额外的标头时,ContainerResponseFilter 是正确的。

    @PreMatching 注释可以应用于ContainerRequestFilter“以指示在实际资源匹配发生之前,应将此类过滤器全局应用于应用程序中的所有资源”。

    将其添加到 ContainerResponseFilter 没有意义。只需删除注释,您的过滤器就可以工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      • 2014-07-03
      • 1970-01-01
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      相关资源
      最近更新 更多