2014-08-31 2 views
6

В wildfly 8.1 с услугами REST я хотел реализовать 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"); 
    } 

} 

Это кажется мне как/Resteasy ошибка Wildfly. У вас есть другая идея/я что-то упускаю?

ответ

5

Вы смешиваете ContainerRequestFilter и ContainerResponseFilter в своем вопросе. Поскольку вы хотите отправить дополнительные заголовки клиенту, то ContainerResponseFilter является правильным.

Аннотации @PreMatching могут быть применены к ContainerRequestFilter «для обозначения того, что такой фильтр должен применяться глобально на всех ресурсах в приложении до фактического сопоставления ресурсов».

Добавление его в ContainerResponseFilter не имеет смысла. Просто удалите аннотацию, и ваш фильтр должен работать.

Смежные вопросы