4

我有一个运行嵌入式码头服务器的项目。另外,我在项目的依赖项中有 angularjs-1.2.12.jar。

如何配置码头,以公开 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);
4

1 回答 1

0

我遇到了同样的问题,看了一遍之后,你的解决方案是最好的。但正如詹姆斯沃德在评论中指出的那样,它构成了一个安全问题。这是我的解决方案,建立在你的基础上:

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

正如这里所指出的,ResourceHandler有点过时了。我实际上是通过扩展DefaultServlet来实现这个解决方案。

于 2017-10-10T02:56:27.970 回答