2014-08-31 10 views
6

REST hizmetlerinde wildfly 8.1'de CORS ContainerRequestFilter ve ContainerResponseFilter'ı uygulamak istedim.ContainerResponseFilter çalışmıyor

Benim istek filtresi düzgün çalışıyor

ancak ContainerResponseFilter yüklenen ne de

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"); 
    } 

} 

adlandırılan bu bir Wildfly/resteasy hata olarak geliyor bana geçmez. Başka bir fikrin var mı yoksa bir şey mi kaçırdım?

cevap

5

Sorunuza ContainerRequestFilter ve ContainerResponseFilter karışıyorsunuz. Müşteriye ek Başlıklar göndermek istediğinizde ContainerResponseFilter doğru olanıdır.

@PreMatching ek açıklaması, ContainerRequestFilter ek açıklamasında "gerçek kaynak eşleştirmesi gerçekleşmeden önce bu tür filtrelerin uygulamadaki tüm kaynaklarda global olarak uygulanması gerektiğini belirtmek için" uygulanabilir.

ContainerResponseFilter'a eklemek anlamlı değildir. Sadece ek açıklamaları kaldırın ve filtreniz çalışmalıdır.