如何在dropwizard中启用URL重写?我需要将匹配特定模式的所有网址重写为/.
我正在使用dropwizard 0.7.1并且我正在尝试在前端以html5模式运行Angular.js应用程序,这需要重写网址(请参阅下的https://docs.angularjs.org/guide/ $位置服务器端部分)。
答案 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
最后