2010-07-27 8 views
0

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

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

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

ответ

0

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

И я также изменил форму -error-страницы в Интернете.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. Это завершает сеанс и перенаправляет их на страницу входа в систему.

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