在重定向过滤器时停止进一步处理 [英] Stop further processing when redirecting in a filter
本文介绍了在重定向过滤器时停止进一步处理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有URLRewirteFilter,它检查请求的域是否以www开头。并重定向到no-www url。当要重定向请求时,如何停止进一步处理(调用JSF应用程序,调用servlet等)?
到目前为止我有这个:
I have URLRewirteFilter which checks if requested domain starts with www. and redirects to no-www url. How can I stop futher processing (invoking JSF app, call servlets etc.) when request is to be redirected? So far I have this:
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);
}
推荐答案
只需添加返回
语句到结尾如果
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);
}
另请参阅:
- java.lang.IllegalStateException:提交响应后无法(转发| sendRedirect |创建会话)
- java.lang.IllegalStateException: Cannot (forward | sendRedirect | create session) after response has been committed
See also:
这篇关于在重定向过滤器时停止进一步处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文