我可以让Grizzly提供静态内容
我可以创建servlet过滤器来过滤命名的servlet
但我无法让servlet过滤器过滤静态内容。我该怎么做?
这是我到目前为止的代码:
WebappContext webappContext = new WebappContext("grizzly web context", "");
FilterRegistration authFilterReg = webappContext.addFilter("Authentication Filter", org.package.AuthenticationFilter.class);
// If I create a ServletContainer, I can add the filter to it like this:
// authFilterReg.addMappingForServletNames(EnumSet.allOf(DispatcherType.class), "servletName");
HttpServer httpServer = GrizzlyHttpServerFactory.createHttpServer(BASE_URI);
webappContext.deploy(httpServer);
// This works, but the content does not go through the authentication filter above
httpServer.getServerConfiguration().addHttpHandler(new StaticHttpHandler(absolutePath), "/static");
答案 0 :(得分:1)
作为WebappContext(Web应用程序)的一部分注册的ServletFilter将仅针对与此WebappContext(Web应用程序)相关的请求执行。
因此,我看到的一个解决方案是在WebappContext上注册DefaultServlet [1]并使用它而不是StaticHttpHandler。类似的东西:
ArraySet<File> set = new ArraySet<File>(File.class);
set.add(new File(absolutePath));
ServletRegistration defaultServletReg = webappContext.addServlet("DefaultServlet", new DefaultServlet(set) {});
defaultServletReg.addMapping("/static");