2015-08-16 4 views
1

Я пытаюсь определить весеннюю ботинок, майку и то, как отношения трикотажа и весенней загрузки связаны друг с другом.Весна и фильтр Джерси - поставщик или компонент?

@Component 
public class CORSFilter implements Filter { 


    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
     HttpServletResponse response = (HttpServletResponse) res; 
     response.setHeader("Access-Control-Allow-Origin", "*"); 
     response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); 
     response.setHeader("Access-Control-Max-Age", "3600"); 
     response.setHeader("Access-Control-Allow-Headers", "x-requested-with"); 
     chain.doFilter(req, res); 
    } 

    public void init(FilterConfig filterConfig) { 
    } 

    public void destroy() { 
    } 


} 

Когда он у меня помечен @Provider и сделать Джерси взгляд в пакете, где он живет для него, он не находит его. Он работает, когда я делаю это @Component.

@Configuration 
@ApplicationPath("/api/v1") 
public class JerseyConfig extends ResourceConfig{ 

    public JerseyConfig() { 
     // DOESNT FIND MY CORSFilter as Provider 
     this.packages("com.mypackage.rest"); 
    } 


} 

Содержит ли @Configuration аннотация, что ДжерсиContext является весенним бобом? А потом пружина вводит CORSFilter, потому что находит компонент типа фильтра? Что здесь происходит?

ответ

1

Вы реализуете фильтр сервлета (реализует фильтр), что означает, что контейнер сервлета создает экземпляр фильтра. Когда вы предоставляете аннотацию @component, все равно ее контейнер сервлета, который инициализирует этот фильтр. Его единственный, что весенний контекст знает об этом, используя прослушиватель contextloader.

В джерси ваш фильтр должен реализовывать ContainerRequestFilter или ContainerResponseFilter так, чтобы конфигурации трикотажа применялись к фильтрам, таким как путь URL. Поскольку вы использовали фильтр сервлета, вы должны настроить его вручную.

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