Java Spring和Jersey筛选器-提供程序还是组件?
我试图确定spring boot、jersey以及jersey和spring boot上下文之间的关系Java Spring和Jersey筛选器-提供程序还是组件?,java,spring,jersey,spring-boot,jax-rs,Java,Spring,Jersey,Spring Boot,Jax Rs,我试图确定spring boot、jersey以及jersey和spring boot上下文之间的关系 @Component public class CORSFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServl
@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的标签,并让Jersey在它为之生活的包中出现时,它没有找到它。当我将其设置为@组件时,它就会工作
@Configuration
@ApplicationPath("/api/v1")
public class JerseyConfig extends ResourceConfig{
public JerseyConfig() {
// DOESNT FIND MY CORSFilter as Provider
this.packages("com.mypackage.rest");
}
}
@Configuration注释是否使JerseyContext成为Springbean?然后spring注入CORSFilter,因为它找到了过滤器类型的组件?这里发生了什么?您正在实现一个servlet过滤器(implements filter),这意味着servlet容器正在实例化过滤器。当您提供@component注释时,它仍然是初始化此过滤器的servlet容器。只有spring上下文使用contextloader侦听器知道这一点 在jersey中,过滤器应实现
ContainerRequestFilter
或ContainerResponseFilter
,以便jersey配置应用于URL路径等过滤器。
因为您使用了servlet过滤器,所以应该手动配置它