2013-09-26 4 views
0

Позвольте мне предисловие к этому, сказав, что я не очень хорошо разбираюсь весной. Я был брошен в проект на работе и стараюсь как можно быстрее разворачиватьсяSpring Security LDAP - проблемы с аутентификацией пользователя - проблема с контейнером?

Имея это в виду, я пытаюсь реализовать весеннюю безопасность с использованием JASIG CAS и LDAP.

Когда я загрузил этот набор из локального LDAP, все работало нормально. Однако, поскольку я переместил его на корпоративный LDAP, Webapp больше не работает.

На данный момент я могу подтвердить, что этот скрипт успешно регистрируется в LDAP и проверяет пути к контейнерам, однако я получаю ошибку сервера перед загрузкой страницы.

Код:

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:sec="http://www.springframework.org/schema/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" > 


<bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource"> 
    <!-- The URL of the ldap server, along with the base path that all other ldap path will be relative to --> 
    <constructor-arg value="ldaps://141.161.99.74:636/dc=testing,dc=com"/> 
    <property name="userDn" value="uid=OdinAdmin,ou=Specials,dc=testing,dc=com" /> 
    <property name="password" value="testpw" /> 
</bean> 

<bean id="ldapAuthProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider"> 
    <constructor-arg> 
    <bean class="org.springframework.security.ldap.authentication.BindAuthenticator"> 
      <constructor-arg ref="contextSource"/> 
      <property name="userSearch" ref="ldapUserSearch"/> 
    </bean> 
    </constructor-arg> 
    <constructor-arg ref="authoritiesPopulator" />      <!-- Populates authorities in the UserDetails object --> 
    <property name="userDetailsContextMapper" ref="userDetailsMapper" /> <!-- Adds OWF groups to the UserDetails object --> 
</bean> 

<bean id="authoritiesPopulator" class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator"> 
    <constructor-arg ref="contextSource"/> 
    <constructor-arg value="ou=OdinRoles,ou=Odin,ou=Apps"/> <!-- search base for determining what roles a user has --> 
    <property name="groupRoleAttribute" value="cn"/> 
    <!-- the following properties are shown with their default values --> 
    <property name="rolePrefix" value="ROLE_"/> 
    <property name="convertToUpperCase" value="true"/> 
    <property name="searchSubtree" value="true"/> 
</bean> 

<bean id="ldapUserSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch"> 
    <constructor-arg value="ou=people" /> <!-- search base for finding User records --> 
    <constructor-arg value="(uid={0})" /> <!-- filter applied to entities under the search base in order to find a given user. 
              this default searches for an entity with a matching uid --> 
    <constructor-arg ref="contextSource" /> 
</bean> 

<!-- Custom class that goes back to the ldap database to search for OWF group records and also adds 
    extra attributes from the user's ldap record to the UserDetails object. 
    The class implementation of this will likely need to be changed out for differnt setups --> 
<bean id="userDetailsMapper" class="ozone.securitysample.authentication.ldap.OWFUserDetailsContextMapper"> 
    <constructor-arg ref="contextSource" /> 
    <constructor-arg value="ou=OdinGroups,ou=Odin,ou=Apps" /> <!-- search base for finding OWF group membership --> 
    <constructor-arg value="(uniqueMember={0})" /> <!-- filter that matches only groups that have the given username listed 
                as a "member" attribute --> 
    <property name="searchSubtree" value="true"/> 
</bean> 

<bean id="ldapUserService" class="org.springframework.security.ldap.userdetails.LdapUserDetailsService"> 
    <constructor-arg ref="ldapUserSearch" /> 
    <constructor-arg ref="authoritiesPopulator" /> 
    <property name="userDetailsMapper" ref="userDetailsMapper" /> 
</bean> 

</beans> 

Мой вопрос, могу ли я иметь подконтейнерах в конструкторе-Arg значений для группы и роли поиска? В моей предыдущей версии все было в одном контейнере. Таким образом, я мог бы просто включить все, что включено в мою базу-dn, и просто ссылаться на конкретное подразделение внутри этого. То есть. вместо

Я не уверен, что это вызывает проблему, но всякое понимание было бы весьма полезно. Благодаря!

+0

Что вы подразумеваете под «подконтейнерами»? - My This помогает: Constructor Args и Properties отображаются в классах 1: 1. Поэтому в конфигурации весны вы можете сделать то же самое, но не более или менее, чем с обычной командой 'new' в java. – Ralph

+0

@Ralph Спасибо за ответ. В моей первоначальной конфигурации все мои роли, группы и пользователи были в основном под тем же DN .. 'ou = Люди, dc = argusldapprod, dc = argus, dc = test, dc = edu ou = OdinRoles, dc = argusldapprod , dc = argus, dc = test, dc = edu ou = OdinGroups, dc = argusldapprod, dc = argus, dc = test, dc = edu' Теперь группы и роли находятся в разных подконтейнерах: ' ou = Люди, dc = test, dc = edu ou = OdinGroups, ou = Odin, ou = Apps, dc = test, dc = edu ou = OdinRoles, ou = Odin, ou = Apps, dc = test, dc = edu' Я не знал, вызвали ли подконтейнеры приложений и Odin проблемы. – ev0lution37

ответ

0

Эта проблема фактически была основана на приложении, которое я выполнял. Для этого требовались имена определенных ролей (ROLE_ADMIN, ROLE_USER). Мне пришлось сопоставить существующие роли с этими 2 через пользовательский класс Java.

Спасибо за помощь!

0

Можете ли вы указать, какая именно ошибка вы получаете, а какая часть на самом деле терпит неудачу? Там довольно много конфигурации, и это очень поможет нам, если мы сузим ее до одной ошибки или около того.

P.S: Я хотел, чтобы это был комментарий, но мне жаль, мне еще не разрешено комментировать из-за ограничений SO.

+0

Спасибо за ответ. Странно то, что ни одна трассировка стека не появляется ни в одном из журналов при входе в систему. Моя аутентификация Jasig CAS и еще один доморощенный webapp отлично работают с новым LDAP, но я вижу, что реализованная инфраструктура виджета дает проблемы. Появилась какая-то другая stacktrace, поэтому это очень странно. – ev0lution37

Смежные вопросы