Dropwizard网址重写

时间:2015-01-29 22:11:17

标签: url jetty dropwizard

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

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

3 个答案:

答案 0 :(得分:1)

您可以像这样添加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));

答案 1 :(得分:1)

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

它与mod_rewrite非常吻合。

答案 2 :(得分:0)

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

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

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

它也支持正则表达式。

请注意,要使其与其他捆绑包(例如静态资产和https重定向)一起使用,订购很重要。应该是:

  • AssetsBundle首先
  • HttpsRedirect
  • PathRedirect最后