web-dev-qa-db-ja.com

フィルターでリダイレクトする場合、以降の処理を停止します

リクエストされたドメインがwwwで始まるかどうかをチェックするURLRewirteFilterがあります。 no-www URLにリダイレクトします。リクエストがリダイレクトされる場合、それ以上の処理(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);
}
22
karolkpl

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);
}

以下も参照してください。

38
BalusC