Я пытался создать фильтр, чтобы запретить пользователям, которые не вошли в систему, доступ к определенным страницам. Для этого я создал класс фильтра со следующим методом doFilter
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String url = request.getRequestURI();
boolean allowedRequest = false;
System.out.println(url);
if(urlList.contains(url)) {
allowedRequest = true;
System.out.println("in list");
}
if (!allowedRequest) {
Object o = request.getSession().getAttribute("UserInfo");
if (null == o) {
System.out.println("Hey i am in");
response.sendRedirect("/login.jsp");
}
}
chain.doFilter(req, res);
} // end of doFilter
Чтобы разрешить страницы, которые не требуют входа пользователя, я создал список URL-адресов arraylist в init().
Сейчас происходит очень странная глупость. предположим, у меня есть две страницы home.jsp и dcr.jsp. Когда я пытаюсь получить доступ к home.jsp без входа в систему, я успешно перенаправляюсь на login.jsp, но когда я пытаюсь получить доступ к dcr.jsp, он не перенаправляется, хотя входит в цикл if(null == o), который я могу понять потому что я получаю эту строку, напечатанную в консоли. Это вывод, который я получаю на сервере. Это вывод, который я получаю на сервере.
/dcrmaintenance.jsp
Hey i am in
Что говорит мне, что null == o было правдой.
Страница dcr.jsp обращается к объекту сеанса, и, поскольку пользователь не вошел в систему, он получает java.lang.NullPointerException, как и ожидалось, но я не могу понять, почему перенаправление не происходит даже после входа в цикл. Если кто-то может указать, где я делаю ошибку, это будет оценено.