在重定向filter时停止进一步处理
我有URLRewirteFilter,它检查请求的域是否以www开头。 并重定向到no-www url。 当要重定向请求时,如何停止进一步处理(调用JSF应用程序,调用servlet等)? 到目前为止我有这个:
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
的末尾添加一个return
语句
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 |创建会话)