Отключение фильтра на первой странице
Я сделал фильтр аутентификации, чтобы нельзя было по прямой ссылке получать права определенных пользователей.
Код фильтра:
import ProjectHotel.Path;
import jakarta.servlet.*;
import jakarta.servlet.annotation.*;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import java.io.IOException;
@WebFilter(filterName = "AuthFilter")
public class AuthFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
}
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
final HttpServletRequest req = (HttpServletRequest) request;
final HttpServletResponse res = (HttpServletResponse) response;
HttpSession session = req.getSession(false);
String uri = req.getRequestURI();
String email = (String)session.getAttribute("email");
if (email==null && (uri.contains("/user") || uri.contains("/manager") || uri.contains("/admin"))) {
res.sendRedirect(Path.ERROR_PAGE);
}
else {
chain.doFilter(request,response);
}
chain.doFilter(request, response);
}
}
И добавил этот фильтр в web.xml
<filter>
<filter-name>AuthFilter</filter-name>
<filter-class>ProjectHotel.Controller.Filters.AuthFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AuthFilter</filter-name>
<url-pattern>something here</url-pattern>
</filter-mapping>
Как мне указать <url-pattern>, чтобы фильтр не срабатывал на стартовой странице. Ибо поскольку я еще не зашел в аккаунт - сессии нет, из-за чего ловлю исключение.
Ответы (1 шт):
Автор решения: Roman C
→ Ссылка
Если вы используете Servlet 3.0 и аннотацию @WebFilter, то web.xml не нужен, и описывать адреса, на которые парится фильтр можно с помощью атрибута urlPatterns:
public abstract String[] urlPatternsШаблоны URL, к которым применяется фильтр
По умолчанию:{}
Можно поставить проверку, например
String uri = req.getRequestURI();
if (uri.equals("/")) {chain.doFilter(req, res); return;}