Я действительно сомневаюсь, что вы сгенерируете идентификаторы сеансов, которые более безопасны, чем идентификаторы, сгенерированные контейнером, но вот что вы могли бы сделать, не используя какое-либо расширение для конкретного контейнера.
Создать фильтр сервлета, который перехватывает каждый запрос к серверу.
Когда приходит запрос, проверьте, существует ли уже сеанс для этого запроса (используя getSession(false)
). Если он существует, извлеките из запроса ваш конкретный файл cookie MY_SESSION_ID и сравните его значение с тем, которое хранится в сеансе. Если они не совпадают, отклоните запрос.
Если сеанс не существует, то создайте его (используя getSession(true)
), сгенерируйте супер-безопасный идентификатор сеанса, сохраните его как атрибут сеанса и добавьте cookie MY_SESSION_ID в ответ.
Недостатком является автоматическое создание сеанса, даже если он не является строго обязательным. Но в большинстве случаев это происходит при использовании JSP компонентных структур.