Преобразование LDAP из Tomcat в GlassFish - PullRequest
0 голосов
/ 11 мая 2010

У меня есть простое веб-приложение, которое разработано в Netbeans (6.8) и прекрасно работает в Tomcat (6) с использованием LDAP (Active Directory).

Мне нужно преобразовать это в EE (JSF2), поэтому я перехожу из Tomcat в GlassFish (v3).

Я изменил веб-файлы на xhtml и настроил xml-файлы. Однако я не могу заставить конфигурацию GlassFish LDAP проходить аутентификацию.

Я присоединяю мои старые фрагменты web.xml и server.xml (от Tomcat) и части нового web.xml, sun-web.xml и конфигурации GlassFish.

Если кто-нибудь может помочь мне выяснить, где мне не хватает фрагмента, который позволит аутентифицировать пользователя, я был бы признателен. (Кстати, я не использую роли, достаточно провести аутентификацию на базе данных LDAP.)

Как сейчас, мое приложение предложит мне ввести пользователя, когда я попытаюсь получить доступ к файлу в «защищенной» области, и сервер GlassFish выдает исключение, если не удается выполнить аутентификацию. Поскольку он работает под управлением Tomcat, я знаю, что у меня есть нужная информация, я просто не знаю, как ее отформатировать, чтобы GlassFish передавал ее.

Спасибо.

ФАЙЛЫ TOMCAT: - Tomcat server.xml:

  • web.xml:

    <web-resource-collection>
      <web-resource-name>Protected Area</web-resource-name>
      <description>Authentication Required</description>
      <url-pattern>/faces/protected/*</url-pattern>
    </web-resource-collection>
    
    <auth-constraint>
      <role-name>*</role-name>
    </auth-constraint>
    

    *

    Бейсик Пожалуйста введите свой логин и пароль:

СТЕКЛЯННЫЕ ФАЙЛЫ: (Я включил Диспетчер безопасности на панели «Безопасность», установил для «Область по умолчанию» значение «LDAPRealm» и добавил параметры JVM «-Djava.naming.referral = follow».) - domain.xml:

<auth-realm name="certificate" classname="com.sun.enterprise.security.auth.realm.certificate.CertificateRealm" />
<auth-realm classname="com.sun.enterprise.security.auth.realm.ldap.LDAPRealm" name="LdapRealm">
  <property description="()" name="search-bind-password" value="xxxxxxxx" />
  <property description="()" name="search-bind-dn" value="cn=xxxxxxxx,ou=Administrators,ou=Information Technology,ou=ITTS,ou=Administrative,ou=xxx,dc=xxxxxx,dc=xxx" />
  <property name="jaas-context" value="ldapRealm" />
  <property name="base-dn" value="ou=xxx,dc=xxxxxx,dc=xxx" />
  <property name="directory" value="ldap://xxxx.xxxxxx.xxx:389" />
  <property name="search-filter" value="(&amp;(objectClass=user)(sAMAccountName=%s))" />
</auth-realm>

-web.xml:

  <security-constraint>
    <display-name>protected</display-name>

    <web-resource-collection>
      <web-resource-name>ProtectedArea</web-resource-name>
      <description/>
      <url-pattern>/faces/protected/*</url-pattern>
    </web-resource-collection>

    <auth-constraint>
      <description/>
      <role-name>*</role-name>
    </auth-constraint>
  </security-constraint>

  <security-role>
    <description/>
    <role-name>*</role-name>
  </security-role>

  <login-config>
    <auth-method>FORM</auth-method>
    <realm-name>LDAPRealm</realm-name>
    <form-login-config>
      <form-login-page>/faces/login.xhtml</form-login-page>
      <form-error-page>/faces/loginError.xhtml</form-error-page>
    </form-login-config>
  </login-config>
  • ВС-web.xml:

Вот исключение, которое он выдает:

SEVERE: SEC1113: Exception in LdapRealm when trying to authenticate user.
javax.security.auth.login.LoginException: javax.security.auth.login.LoginException: User yyyyyyy not found.
        at com.sun.enterprise.security.auth.realm.ldap.LDAPRealm.findAndBind(LDAPRealm.java:450)

1 Ответ

0 голосов
/ 03 августа 2010

Ну, я решил эту проблему. Glassfish, похоже, не так простителен, как Tomcat в группах. Использование * для названия группы не работает для меня.

  • В domain.xml я добавил эту строку:
<property name="assign-groups" value="Domain Users" />

- «Пользователи домена» - это группа в Active Directory, в которую все попадают при создании своей учетной записи. (Это приложение нужно только для проверки того, что человек находился в AD, оно использует внутреннюю безопасность для доступа в приложении.)

  • В файле web.xml это ограничение авторизации необходимо было добавить в 'security-contraints':
<auth-constraint>
  <description/>
  <role-name>users</role-name>
</auth-constraint>

- ссылки на "пользователей" указаны в файле sun-web.xml, но не в моем приложении.

  • В sun-web.xml это сопоставление необходимо для связи «пользователей» с «пользователями домена»:

& lt security-map-mapping & gt

&lt role-name &gt users &lt /role-name &gt
&lt group-name &gt Domain Users &lt /group-name &gt    

& lt / security-map-mapping & gt

- Судя по всему, эта функция редактирования сообщений не очень хорошо обрабатывает символы gt и lt в кавычках или коде. Код выше должен иметь правильные символы. (Полагаю, стекопоток нуждается в лучшем тестировании ...)

Похоже, что ключевым компонентом, который мне не хватало, были "assign-groups" в domain.xml.

Надеюсь, это поможет всем, у кого есть проблемы с этим.

...