Geronimo webapp, использующий аутентификацию ldap - PullRequest
0 голосов
/ 27 июля 2010

Я использую Apache Geronimo в качестве сервера приложений. А аутентификация происходит через LDAP с использованием Apache Directory Service. У меня нет предыдущего опыта разработки программного обеспечения на JavaEE, поэтому, пожалуйста, успокойтесь. Дайте мне знать, если мне нужно что-то объяснить более подробно.

По сути, мой шаг входа в систему очень похож на этот пример из документации geronimo: https://cwiki.apache.org/GMOxDOC22/ldap-sample-app-ldap-sample-application.html

Когда пользователь пытается войти в систему, происходит три различных поведения:

  1. Когда пользователь входит в систему с правильным именем пользователя, которое входит в правильную группу ldap, он попадает в безопасную область сайта. И я не уверен, как выйти из системы до окончания сеанса.

  2. Когда пользователь входит в систему с именем пользователя / паролем, которого нет в каталоге LDAP, пользователь перенаправляется в /auth/logonError.html?param=test (это местоположение указано в 'web. XML ')

  3. Когда пользователь входит в систему с правильным именем пользователя / паролем, которого нет в соответствующей группе, они перенаправляются на «HTTP 403 запрещенную страницу». Пример этой страницы находится внизу примера ldap. Поведение должно быть таким же, как и у пользователя, не прошедшего проверку подлинности.

Во всех этих случаях пользователь не может повторить процесс входа в систему до тех пор, пока браузер не будет перезапущен или не будет использован другой браузер. Это большая проблема, с которой я столкнулся.

Я бы хотел, чтобы произошли следующие сценарии.

  1. Правильно аутентифицированный пользователь может выйти из системы и попытаться войти снова.

  2. Пользователь с неверной аутентификацией перенаправляется на экран входа в систему и получает запрос на повторную попытку.

Что мне нужно сделать, чтобы это произошло? Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 27 июля 2010

Не всегда ли это происходит.Вы сталкиваетесь с проблемой, боретесь с ней в течение нескольких дней, наконец отправляете ее в 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.Таким образом, аутентифицированный пользователь теперь может правильно выйти из системы.

Для трех сценариев:

  1. Пользователь может правильно войти в систему, пользователь щелкает ссылку на EndSessionServlet для выхода из системы
  2. Пользователь вводит правильное имя пользователя / пароль для ldap, но не входит в правильную группу.Этот пользователь обычно отправляется на страницу 403, которая теперь делает сеанс недействительным, и перенаправляет на страницу входа.
  3. Пользователь вводит неверное имя пользователя / пароль и отправляется на него, для которого также установлено значение EndSessionServlet.Это завершает сеанс и перенаправляет их на страницу входа.

Так что все сценарии теперь работают нормально.

...