2014-08-31 55 views
6

在具有REST服務的wildfly 8.1中,我想實現CORS ContainerRequestFilter和ContainerResponseFilter。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的錯誤。你有另一個想法/我錯過了什麼嗎?

回答

5

您在混合ContainerRequestFilterContainerResponseFilter在您的問題。正如你想發送額外的頭到客戶端ContainerResponseFilter是正確的。

@PreMatching註釋可應用於ContainerRequestFilter「以指示在實際資源匹配發生之前應該在應用程序中的所有資源上全局應用此類過濾器」。

將它添加到ContainerResponseFilter沒有任何意義。只要刪除註釋,你的過濾器應該工作。