Не всегда ли это происходит.Вы сталкиваетесь с проблемой, боретесь с ней в течение нескольких дней, наконец отправляете ее в StackOverflow (или где-либо еще), и затем вы сравнительно легко решаете проблему.
Я внес некоторые изменения в свое приложение, которые устранили проблему,Я публикую то, что сделал в случае, если кто-нибудь натолкнется на это из Google с похожей проблемой.
Сначала я создал сервлет (называемый EndSessionServlet), который просто сделал это:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
endSession(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
endSession(request, response);
}
private void endSession(HttpServletRequest request, HttpServletResponse response) throws IOException{
request.getSession().invalidate();
response.sendRedirect(".");
}
ИЗатем я добавил это в свой файл web.xml:
<error-page>
<error-code>403</error-code>
<location>/EndSessionServlet</location>
</error-page>
И я также изменил страницу формы-ошибки в web.xml:
<login-config>
<auth-method>FORM</auth-method>
<realm-name>This is not used for FORM login</realm-name>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/EndSessionServlet</form-error-page>
</form-login-config>
</login-config>
И я добавил ссылку враздел веб-страницы, аутентифицируемый в EndSessionServlet.Таким образом, аутентифицированный пользователь теперь может правильно выйти из системы.
Для трех сценариев:
- Пользователь может правильно войти в систему, пользователь щелкает ссылку на EndSessionServlet для выхода из системы
- Пользователь вводит правильное имя пользователя / пароль для ldap, но не входит в правильную группу.Этот пользователь обычно отправляется на страницу 403, которая теперь делает сеанс недействительным, и перенаправляет на страницу входа.
- Пользователь вводит неверное имя пользователя / пароль и отправляется на него, для которого также установлено значение EndSessionServlet.Это завершает сеанс и перенаправляет их на страницу входа.
Так что все сценарии теперь работают нормально.