有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在筛选器中重定向时停止进一步处理

我有URLRewertFilter,它检查请求的域是否以www.开头,并重定向到无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);
}

共 (1) 个答案

  1. # 1 楼答案

    只需在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);
    }
    

    另请参见: