在带有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 bug。你有其他想法/我错过了什么吗?
答案 0 :(得分:5)
您在问题中混合了ContainerRequestFilter
和ContainerResponseFilter
。由于您希望向客户端发送其他标头,ContainerResponseFilter
是正确的。
@PreMatching注释可应用于ContainerRequestFilter
&#34;以指示在实际资源匹配发生之前,应在应用程序中的所有资源上全局应用此类过滤器&#34;。< / p>
将其添加到ContainerResponseFilter
没有意义。只需删除注释,您的过滤器就可以正常工作。