Что возвращается после chain.dofilter
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* Servlet Filter implementation class: LoginFilter.
* All URL patterns will go through the LoginFilter
*/
@WebFilter(filterName = "LoginFilter", urlPatterns = "/*")
public class LoginFilter implements Filter {
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
System.out.println("LoginFilter: " + httpRequest.getRequestURI());
// Check if the URL is allowed to be accessed without log in
if (this.isUrlAllowedWithoutLogin(httpRequest.getRequestURI())) {
// Keep default action: pass along the filter chain
chain.doFilter(request, response);
return;
}
// Redirect to login page if the "user" attribute doesn't exist in session
if (httpRequest.getSession().getAttribute("user") == null) {
httpResponse.sendRedirect("login.html");
} else {
// If the user exists in current session, redirects the user to the corresponding URL
chain.doFilter(request, response);
}
}
// Setup your own rules here to allow accessing some resources without logged in
// Always allow your own login related requests (html, js, servlet, etc..)
// You might also want to allow some CSS files, etc..
private boolean isUrlAllowedWithoutLogin(String requestURI) {
requestURI = requestURI.toLowerCase();
return requestURI.endsWith("login.html") || requestURI.endsWith("login.js")
|| requestURI.endsWith("api/login");
}
/**
* This class implements the interface: Filter. In Java, a class that implements an interface
* must implemented all the methods declared in the interface. Therefore, we include the methods
* below.
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) {
}
public void destroy() {
}
}
Я изучаю веб-приложение, это часть моей домашней работы.
Мое понимание фильтра таково, что
Существует цепочка фильтров по
запрос -> фильтр1-> фильтр2 -> больше фильтров-> ресурс на сервере
При вызове chain.dofilter фильтры будут вызываться последовательно или переходить к следующему фильтру, но в этом демонстрационном примере.
this.isUrlAllowedWithoutLogin(httpRequest.getRequestURI()
Есть return
добавлено после chain.dofilter
, Может кто-нибудь помочь объяснить это. Я не причина или подоплека сделать это. Из большинства онлайн-примеров и ресурсов, которые я не видел, используя return
после chain.dofilter
, Почему код дозы добавить return
после chain.dofilter
,