2014-02-16 79 views
4

我有一个运行嵌入式jetty服务器的项目。 另外,我有项目的依赖项中的angularjs-1.2.12.jar。如何配置嵌入式jetty + webjars

如何配置jetty以暴露META-INF /资源中的文件。 我试着做到以下几点:从目标/班

ResourceHandler resource_handler = new ResourceHandler(); 
    resource_handler.setDirectoriesListed(true); 
    resource_handler.setWelcomeFiles(new String[]{ "index.html" }); 
    resource_handler.setBaseResource(Resource.newClassPathResource("/")); 

    Server server = new Server(8080); 
    server.setHandler(resource_handler); 

但只有文件被曝光。

谢谢。

UPD:解决

ResourceHandler resource_handler = new ResourceHandler() { 
     @Override 
     public Resource getResource(String path) 
       throws MalformedURLException { 
      Resource resource = Resource.newClassPathResource(path); 
      if (resource == null || !resource.exists()) { 
       resource = Resource.newClassPathResource("META-INF/resources" + path); 
      } 
      return resource; 
     } 
    }; 
    resource_handler.setDirectoriesListed(true); 
    resource_handler.setWelcomeFiles(new String[]{"index.html"}); 
    resource_handler.setResourceBase("/"); 
    server.setHandler(resource_handler); 
+0

你使用什么版本的Jetty? –

+0

jetty-all-9.1.1 –

+3

它看起来像解决方案可能会暴露类路径上的所有资源作为静态资产。如果这样可能是一个很大的安全漏洞。这就是为什么Servlet 3的默认设置只能为'META-INF/resources'前缀路径执行此操作。 –

回答

0

我知道这是一个老问题,但我有同样的问题,并在寻找一切后,你的解决方案是最好的。但正如James Ward在评论中指出的那样,这构成了一个安全问题。这里是我的解决方案,建立在你的:

public class MyResourceHandler extends ResourceHandler { 
    @Override 
    public Resource getResource(String path) { 
     Resource resource = Resource.newClassPathResource("META-INF/resources" + path); 
     if(resource == null) resource = super.getResource(path); 
     return resource; 
    } 
} 

正如指出hereResourceHandler有点过时。我实际上通过扩展DefaultServlet来实现此解决方案。

相关问题