从与服务相同的目录提供静态内容 - Dropwizard

时间:2013-11-19 16:12:26

标签: filter jersey servlet-filters dropwizard static-content

我正在构建一个Dropwizard应用程序来替换遗留的Web服务器,因为有很多指向此服务器的链接,我必须向后兼容并支持旧服务器用来服务的各种资源。

问题是我有一堆静态JS文件是从与服务本身相同的目录/路径提供的。显然,您无法从单个目录中提供这两种类型(服务和静态)。所以,如果我添加静态包(现在位于资源目​​录中),如下所示:

bootstrap.addBundle(new AssetsBundle("/javascript", "/media")); 

动态服务(从/ media /提供)开始返回404 如果我评论它,动态服务工作正常。

正如我所说,我无法改变任何链接,静态或动态...... 有什么建议吗?

更新

已经解决了,这是一个受@airborn回答启发的工作示例,这个question也指向this module,它声称一般会解决这个问题。

此示例将对所有传入请求应用过滤器,并允许您重定向到您想要的任何位置(类似于apache上的.htaccess功能)。

将以下行放在主dropwizard类的运行函数中(扩展名为** Service<AppConfiguration> **

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() {
        //
    }
}

1 个答案:

答案 0 :(得分:4)

Environment课程中使用Service,您应该可以向Jetty添加过滤器。在此代理筛选器中,您应该能够检测这些js文件并将它们重定向到新位置。