Spring Security с LDAP и пользовательским UserDetailsContextMapper - PullRequest
5 голосов
/ 04 марта 2011

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

Я настроил Spring Security для использования аутентификации LDAP со следующими компонентами:

<bean id="contextSource"
    class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
    <constructor-arg value="ldaps://192.168.1.102:636" />
    <property name="userDn" value="manager" />
    <property name="password" value="password" />
</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">
                <bean id="userSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
                    <constructor-arg index="0" value="" />
                    <constructor-arg index="1" value="(mail={0})" />
                    <constructor-arg index="2" ref="contextSource" />
                </bean> 
            </property>
        </bean>
    </constructor-arg>
    <property name="userDetailsContextMapper" ref="myContextMapper" />
</bean>

Однако, даже если я определил myContextMapper как:

<bean id="myContextMapper" class="com.mypackage.MyLDAPUserDetailsMapper">
    <property name="rolePrefix" value="TEST_PREFIX" />
</bean>

itне работает.Это означает, что пользовательский преобразователь игнорируется (я не получаю никаких результатов отладки).

ps applicationContext-security.xml можно увидеть ниже, кроме пользовательского UserDetailsMapper, который игнорируется, аутентификация и назначение ролей работают нормально.

<authentication-manager>
    <ldap-authentication-provider server-ref="contextSource"/>
</authentication-manager>

1 Ответ

9 голосов
/ 07 марта 2011

Вам не нужно настраивать встроенные классы UserDetailsContextMapper.Spring Security автоматически выбирает правильный UserDetailsContextMapper в зависимости от типа запрошенного класса LdapUserDetails, который настроен атрибутом user-details-class ldap-authentication-provider.Если вы используете свой собственный преобразователь контекста, настройте его с помощью атрибута user-context-mapper-ref.

...