Аутентификация Spring Security LDAP Множественный шаблон dn

Мы используем весеннюю безопасность и используем LDAP для аутентификации нашего веб-приложения. В нашей конфигурации LDAP доступно несколько шаблонов userndn. Я хотел бы знать, как настроить несколько шаблонов userdn в файле applicationContext-security.xml. У меня указана следующая конфигурация

<b:bean id="ldapProvider"
    class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
    <b:constructor-arg>
        <b:bean
            class="com.intl.set.him.mait.security.CustomLdapAuthenticator">
            <b:constructor-arg ref="ldapContextSource" />
            <b:property name="userDnPatterns" value="cn={0},OU=GEN,OU=Users"/>
            <b:property name= "commonNameQuery" value = "select USER_CN from emt.sec_users1 where user_id=?"/>
            <b:property name="datasource" ref="dataSourceMSSQL"/>  

</b:bean>

Когда я предоставляю приведенную выше конфигурацию в файле xml, пользователи, соответствующие шаблону Dn для определенного местоположения, смогут только войти в систему. Я хочу знать, как мы можем настроить несколько шаблонов userdn в файле xml.

Любая помощь в этом очень ценится. Спасибо


person vr3w3c9    schedule 07.05.2013    source источник
comment
Не публикуйте внутреннюю информацию в Сети!!!   -  person Michael    schedule 07.05.2013


Ответы (1)


Компонент действует как конструктор (часто с аргументами и/или свойствами) для указанного класса. Если вы просто расширите этот класс в своем собственном подклассе, вы можете передать аргументы конструктору суперкласса и установить свойства из подкласса:

CustomLdapAuthenticationProvider.java

public class CustomLdapAuthenticationProvider extends LdapAuthenticationProvider {
    //your constructor
    public CustomLdapAuthenticationProvider(unParsedArguments) {
        //some logic to parse the arguments as desired
        super(parsedArguments);
        //set super's properties as desired

    }

    //other methods as needed/required
}

Этот подход дает вам значительную гибкость в дизайне вашего приложения, и это то, что мотивирует открытый исходный код — его легко расширять, переопределять и т. д. По большей части вы уже делаете это.

Затем измените applicationContext-security.xml:

<bean id="ldapProvider"
        class="your.project.package.CustomLdapAuthenticationProvider">
    <constructor-arg value="firstArgument"/>
    <constructor-arg value="secondArgument"/>
    <!-- etc. //-->
    <property name="fieldName" value="valueToBeSet"/>
</bean>

Очевидно, это надумано, но вы должны увидеть, что вам нужно сделать: расширить, переопределить/перегрузить и вызвать суперметоды/конструкторы в соответствии с вашей логикой, а не статическим шаблоном.

Надеюсь, это поможет.

person cabbagery    schedule 07.05.2013