У меня есть простое веб-приложение, которое разработано в 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="(&(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>
Вот исключение, которое он выдает:
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)