Я пытаюсь использовать Filter
, чтобы заставить моих пользователей войти в систему, если они хотят получить доступ к некоторым страницам.
Поэтому мой Filter
должен перенаправить их на страницу с ошибкой, если сеанса нет.
Но я не хочу, чтобы это происходило, когда они посещают index.html
, потому что они могут войти на индексную страницу.
Поэтому мне нужен шаблон URL, который соответствует всем страницам, кроме /
и index.xhtml
.
Как я могу это сделать? Могу ли я использовать регулярное выражение в моем web.xml
?
РЕДАКТИРОВАТЬ:
Прочитав это
Я думал, что могу сделать что-то вроде:
if (!req.getRequestURI().matches("((!?index)(.*)\\.xhtml)|((.*)\\.(png|gif|jpg|css|js(\\.xhtml)?))"))
в моем методе doFilter()
, но он все еще обрабатывает все.
Я уверен, что регулярное выражение работает, потому что я тестировал его в Интернете, и оно соответствует файлам, которые не нужно фильтровать, но содержимое if выполняется даже для исключенных файлов!
РЕДАКТИРОВАТЬ 2:
Я пробую новый способ.
Я сопоставил фильтр с *.xhtml
в моем web.xml
, поэтому мне не нужно исключать css, изображения и javascript с помощью регулярного выражения выше.
Вот новый код (в doFilter()
)
if (req.getRequestURI().contains("index")) {
chain.doFilter(request, response);
} else {
if (!userManager.isLogged()) {
request.getRequestDispatcher("error.xhtml").forward(request, response);
} else {
chain.doFilter(request, response);
}
}
но это все еще не так, потому что он вызывает chain.doFilter()
(во внешнем if) на каждой странице.
Как я могу исключить мою индексную страницу из фильтрации?