Я пытаюсь создать фильтр входа в свой веб-проект Java. Проблема в том, что когда я вызываю request.getSession(false), возвращаемый объект сеанса не равен нулю, другими словами, сеанс активен. Но я уверен, что не вызывал getSession() ни в каком другом месте своего кода. Даже если я удалю этот фильтр, он не сработает. Если я открою инструменты разработчика браузера на вкладке сети, он покажет мне набор jsessionid. Сессия устанавливается автоматически?
@ernest_k Итак, как я могу создать фильтр входа в систему, если сеанс всегда открыт?
Сессия не подразумевает вход в систему
Но как я могу убедиться, что это сеанс входа в систему?
вы можете решить и реализовать это, возможно, сохраняя данные в сеансе...
Вы используете JSP-страницы?
Да, я использую JSP
Какой смысл иметь класс / API HttpSession, если мне нужно реализовать все самому?
Если вы хотите отслеживать «вошедшего в систему пользователя», то я думаю, что вы ищете, чтобы отслеживать его с помощью HttpSession, например:
HttpSession session = request.getSession();
session.setAttribute("loggedInUser", userObject);
Ypu может получить его из сеанса, когда вам это нужно, с помощью:
Object loggedInUser = session.getAttribute("loggedInUser");
И позже, когда пользователю нужно «выйти», удалите сохраненного пользователя из сеанса:
session.removeAttribute("loggedInUser");
Чтобы ответить на ваш вопрос в комментариях What's the point to have a HttpSession class/api if i have to implement everything by myself?
: HttpSession
представляет собой разговор с конкретным клиентом, чтобы последующие запросы от того же клиента могли быть идентифицированы и обработаны должным образом. Он вовсе не представляет собой «вошедшего в систему пользователя», что является особым требованием домена — не все службы требуют аутентификации.
Наконец, если вам нужна дополнительная информация о том, когда создается файл cookie JSESSIONID, прочтите этот вопрос.
Обычно сеанс создается автоматически. В частности, если клиент обращается к динамическому ресурсу, такому как сервлет или jsp.