Остановить дальнейшую обработку при перенаправлении в фильтр
У меня есть URLRewirteFilter, который проверяет, начинается ли запрос домена с www. и перенаправляет на URL-адрес не-www. Как я могу прекратить дальнейшую обработку (вызов приложения JSF, сервлетов вызовов и т.д.), Когда запрос должен быть перенаправлен?
Пока у меня есть это:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String sn = req.getServerName().toLowerCase();
if (sn.startsWith("www.")) {
String url = "http://" + getDefaultDomain() + req.getContextPath() + req.getRequestURI();
HttpServletResponse resp = (HttpServletResponse) response;
resp.reset();
resp.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
resp.setHeader("Location", url);
}
chain.doFilter(request, response);
}
Ответы
Ответ 1
Просто добавьте оператор return
в конец if
if (sn.startsWith("www.")) {
String url = "http://" + getDefaultDomain() + req.getContextPath() + req.getRequestURI();
HttpServletResponse resp = (HttpServletResponse) response;
resp.reset();
resp.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
resp.setHeader("Location", url);
return;
}
chain.doFilter(request, response);
или добавьте else
if (sn.startsWith("www.")) {
String url = "http://" + getDefaultDomain() + req.getContextPath() + req.getRequestURI();
HttpServletResponse resp = (HttpServletResponse) response;
resp.reset();
resp.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
resp.setHeader("Location", url);
} else {
chain.doFilter(request, response);
}
См. также: