Отключение фильтра на первой странице

Я сделал фильтр аутентификации, чтобы нельзя было по прямой ссылке получать права определенных пользователей.

Код фильтра:

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;}
→ Ссылка