Filter 从与service-Dropwizard相同的目录提供静态内容
我正在构建一个Dropwizard应用程序来替换旧版Web服务器,由于有很多指向此服务器的链接,我必须向后兼容并支持旧版服务器用于服务的各种资源 问题是,我有一堆静态JS文件,它们来自与服务本身相同的目录/路径。显然,不能从一个目录同时提供这两种类型(服务和静态)。因此,如果我添加静态捆绑包(现在位于resources目录中),如下所示:Filter 从与service-Dropwizard相同的目录提供静态内容,filter,jersey,servlet-filters,dropwizard,static-content,Filter,Jersey,Servlet Filters,Dropwizard,Static Content,我正在构建一个Dropwizard应用程序来替换旧版Web服务器,由于有很多指向此服务器的链接,我必须向后兼容并支持旧版服务器用于服务的各种资源 问题是,我有一堆静态JS文件,它们来自与服务本身相同的目录/路径。显然,不能从一个目录同时提供这两种类型(服务和静态)。因此,如果我添加静态捆绑包(现在位于resources目录中),如下所示: bootstrap.addBundle(new AssetsBundle("/javascript", "/media")); 动态服务(从/media/
bootstrap.addBundle(new AssetsBundle("/javascript", "/media"));
动态服务(从/media/提供)开始返回404
如果我对此进行评论,动态服务可以正常工作
正如我所说,我不能改变任何链接,静态或动态。。。
有什么建议吗
更新:
解决了,这是一个受@airborn的答案启发的工作示例,这也为我指明了方向,它声称可以从总体上解决这个问题
本例将对所有传入的请求应用一个过滤器,并允许您重定向到任何您想要的位置(类似于apache上的.htaccess功能)
在主dropwizard类(扩展**Service
**
environment.addFilter(new UrlRewriteFilter(),"/*");
将该类放置在上述类可以访问的位置
@WebFilter
public class UrlRewriteFilter implements Filter {
@Override
public void init(FilterConfig config) throws ServletException {
//
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
String requestURI = request.getRequestURI();
// Place Redirection logic here (else continues the filter chain).
if (redirectConditionTrue)
String newURI = ""//New URl to do to;
req.getRequestDispatcher(newURI).forward(req, res);
} else {
chain.doFilter(req, res);
}
}
@Override
public void destroy() {
//
}
}
在您的
服务
类中使用环境
,您应该能够向Jetty添加一个筛选器。在这个代理筛选器中,您应该能够检测到这些js文件并将它们重定向到新位置。我以前看到过带有筛选器的示例,但没有使用带有Environment.addFilter的dropwizard的示例,所以没有看到这些示例正在编写的部分-谢谢!为问题附加一个更完整的示例…对于阅读本文的任何人,请注意示例UrlRewriteFilter类无论如何都不使用Url重写器-它只是一个标准的Servlet过滤器。