Dropwizard url 重写

Dropwizard url rewriting

如何在 dropwizard 中启用 URL 重写?我需要将所有匹配特定模式的 url 重写为 /.

我正在使用 dropwizard 0.7.1 并且我正在尝试 运行 前端 html5 模式下的 Angular.js 应用程序,这需要 url 重写(参见 服务器端 部分下的 https://docs.angularjs.org/guide/$location)。

您可以像这样添加 Filter

environment.getApplicationContext().addFilter(
  new FilterHolder(new Filter() {

  @Override
  public void init(FilterConfig filterConfig) throws ServletException {}

  @Override
  public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
      throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;

    if (shouldRedirect(request.getRequestURI())) {
        response.sendRedirect("/");
    } else {
        chain.doFilter(req, res);
    }
  }

  @Override
  public void destroy() {}
}), "/*", EnumSet.allOf(DispatcherType.class));

你可以试试这个:http://www.tuckey.org/urlrewrite/

它与 mod_rewrite 非常相似。

对于简单的规则,在我看来最好的选择是使用 Dropwizard PathRedirect RedirectBundle.

  • dropwizard-redirect-bundle 添加到您的依赖项中
  • 注册捆绑包:

    @Override
    public void initialize(Bootstrap<?> bootstrap) {
      bootstrap.addBundle(new RedirectBundle(
        new PathRedirect("/old", "/new")
      ));
    }
    

它也支持正则表达式。

请注意,要与其他捆绑包一起使用,例如静态资产和 HTTPS 重定向,顺序很重要。应该是:

  • AssetsBundle
  • HttpsRedirect
  • PathRedirect 最后