如何修改球衣响应头

时间:2017-07-18 06:52:50

标签: tomcat jersey jetty

我的休息服务在Jersey服务器上运行,配置如下:

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

但是,出于某种原因,永远不会调用此过滤器。

我使用的是embebed jetty 9.2.13.v20150730。我看到一些建议改变web.xml的答案,但我没有使用xml配置。

1 个答案:

答案 0 :(得分:1)

  

由于某种原因,永远不会调用此过滤器

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

ServletHolder jerseyServlet = new ServletHolder(new ServletContainer(config));
jerseyServlet.setInitOrder(0);
context.addServlet(jerseyServlet, serverConfig.getBaseName());

也可以使用ResourceConfig注册所有内容,而不是使用init参数。您可以使用packages方法设置包扫描,只需使用register方法注册所有提供程序(而不是使用带有init-param的String类名)。

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