2017-07-18 70 views
0

我有一個新澤西的服務器上運行我的休息服務配置如下:如何修改球衣響應頭

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碼頭9.2.13.v20150730。我看到了一些建議更改web.xml的答案,但我沒有使用xml配置。

回答

1

出於某種原因,這個過濾器永遠不會因爲你沒有做與你註冊與過濾器的ResourceConfig什麼叫

。您可以實例化它,而不是將ServletContainer類用於addServlet,將ResourceConfig傳遞給構造函數。

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

而且不是使用初始化參數,你可以只註冊與ResourceConfig一切。您可以使用packages方法來設置軟件包掃描,並且只需使用register方法註冊所有提供程序(而不是將init類參數與init-param一起使用)。

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