Tomcat 如何修改响应头

Tomcat 如何修改响应头,tomcat,jersey,jetty,Tomcat,Jersey,Jetty,我在Jersey服务器上运行rest服务,配置如下: try { final ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); context.setContextPath(serverConfig.getContextPath()); final Server jettyServer = new Server(serverConfig.

我在Jersey服务器上运行rest服务,配置如下:

try {

    final ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
    context.setContextPath(serverConfig.getContextPath());

    final Server jettyServer = new Server(serverConfig.getPort());
    jettyServer.setHandler(context);

    ResourceConfig config = new ResourceConfig();
    config.register(CORSResponseFilter.class);

    final ServletHolder jerseyServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, serverConfig.getBaseName());

    jerseyServlet.setInitOrder(0);

    jerseyServlet.setInitParameter("jersey.config.server.provider.packages", "com.myRest.rest");
    jerseyServlet.setInitParameter("jersey.config.server.provider.classnames", entryPoints());


    jettyServer.start();
    jettyServer.join();

} catch (Exception e) {
    e.printStackTrace();
}
我正在尝试修改所有响应的标题,以便使用过滤器:

@Provider
public class CORSResponseFilter implements ContainerResponseFilter {

@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
        throws IOException {

    MultivaluedMap headers = responseContext.getHeaders();
    headers.add("Access-Control-Allow-Origin", "*");
    headers.add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
    headers.add("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, X-Codingpedia");
}
}
但是,由于某些原因,从未调用此筛选器

我正在使用Embed jetty 9.2.13.v20150730。我已经看到一些建议更改web.xml的答案,但我没有使用xml配置

由于某些原因,从未调用此筛选器

因为您没有对注册过滤器的
ResourceConfig
执行任何操作。您可以实例化它,将
ResourceConfig
传递给构造函数,而不是将
ServletContainer
类用于
addServlet

ServletHolder jerseyServlet = new ServletHolder(new ServletContainer(config));
jerseyServlet.setInitOrder(0);
context.addServlet(jerseyServlet, serverConfig.getBaseName());
也可以不用init参数,只需使用
ResourceConfig
注册所有内容。您可以使用
packages
方法设置包扫描,只需使用
register
方法注册所有提供程序(而不是使用init参数的字符串类名)

ResourceConfig config = new ResourceConfig()
    .packages("com.myRest.rest")
    .register(CORSResponseFilter.class)
    .register(AnyOtherProviderClass.class)
    .register(LikeTheOnesYouListedInThe_entryPoints.class)