У меня есть проект с этой структурой (я не могу изменить его):JSF фильтра пропускать некоторые файлы
Web Pages
META-INF
WEB-INF
assets (javascript, css and images)
includes (top.xhtml, bottom.xhtml, etc)
templates (master.xhtml)
views
fornecedor
-home.xhtml
-user.xhtml
-login.xhtml
franqueador
-home.xhtml
-user.xhtml
-login.xhtml
O имеет login.xhtml
для каждой папки по причине, я не могу изменить его, он был передан руководителем проекта.
Это мой SessionFilter:
@WebFilter("/views/*")
public class SessionFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession(false);
LoginController loginController = (LoginController) ((boolean) (session != null) ? session.getAttribute("loginController") : null);
if (!request.getRequestURI().endsWith("/fornecedor/index.xhtml")) {
if (loginController == null || !loginController.getIsLoggedIn()) {
response.sendRedirect(request.getContextPath()
+ "/views/index.xhtml");
} else {
chain.doFilter(req, res);
}
}
}
}
И это не работает, возвращает пустую страницу HTML-код, и, когда я изменить .xhtml
к .html
, это дает мне цикл перенаправления.
Мне нужно избегать всех моих login.xhtml
страниц и index.xhtml
на папке views
. Я отлаживал if
на моем фильтре, но он всегда возвращает false
.
EDIT
После BalusC ответ я пришел к этому:
if (!request.getRequestURI().endsWith("/views/index.html")
&& !request.getRequestURI().endsWith("/views/fornecedor/login.html")
&& !request.getRequestURI().endsWith("/views/franqueado/login.html")
&& (loginController == null || !loginController.getIsLoggedIn())) {
response.sendRedirect(request.getContextPath() + "/views/index.html");
} else {
chain.doFilter(req, res);
}
Это работает, но есть еще одна проблема, если у меня есть 10 папки, мне нужно, чтобы добавить их на этой if
заявление ... Мне нужно сделать это автоматически.
Привет, спасибо за Ваш ответ, но как насчет '@WebFilter («/ просмотров/*»)'? Просто оставьте это так? – Gerep
Эта аннотация регистрирует фильтр в приложении и позволяет запускать URL-шаблоны, соответствующие '/ views/*'. Если вы удалите это, фильтр не будет вообще зарегистрирован и, следовательно, не будет запущен вообще. – BalusC
, но в моем случае у меня есть несколько папок внутри папки 'views', правильный выбор - оставить его таким образом? '@WebFilter ("/views/* ")' – Gerep