带有 LDAP 和自定义 UserDetailsContextMapper 的 Spring Security

Posted

技术标签:

【中文标题】带有 LDAP 和自定义 UserDetailsContextMapper 的 Spring Security【英文标题】:Spring Security with LDAP and custom UserDetailsContextMapper 【发布时间】:2011-07-08 21:18:38 【问题描述】:

我正在尝试使 Spring Security 3.05 与修改后的 UserDetailsContextMapper 一起使用,以便我可以按照我需要的方式从 LDAP 中获取更多信息,这项任务似乎相当简单,但没有成功。

我已将 Spring Security 配置为通过以下 bean 使用 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>

它不起作用。意味着自定义映射器被忽略(我没有得到任何调试输出)。

附言applicationContext-security.xml 可以在下面看到,除了被忽略的自定义 UserDetailsMapper 之外,身份验证和角色分配工作正常。

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

【问题讨论】:

【参考方案1】:

您不需要配置内置的 UserDetailsContextMapper 类。 Spring Security 根据请求的LdapUserDetails 类的类型自动选择正确的UserDetailsContextMapper,该类型由ldap-authentication-provideruser-details-class 属性配置。如果您使用自己的上下文映射器,请使用属性user-context-mapper-ref 对其进行配置。

【讨论】:

介意如何配置 ldap-authentication-provider 的上述 user-details-class 属性?谢谢! 事情是我使用 来配置身份验证提供程序,并且似乎没有用户上下文映射器引用。你建议如何进行呢?谢谢! @dade 如果您有自己的提供程序,那么您可以配置类似于 OP 的代码,除了您将使用 &lt;ldap-authentication-provider server-ref="contextSource"/&gt; 而不是 &lt;authentication-provider ref="ldapAuthProvider"/&gt; 谢谢@Ritesh。找出为什么东西不起作用。问题是项目特定的。一些 Spring 配置的覆盖正在进行,我最初并没有意识到。

以上是关于带有 LDAP 和自定义 UserDetailsContextMapper 的 Spring Security的主要内容,如果未能解决你的问题,请参考以下文章

如何将对象类和自定义属性添加到 LDIF 文件?

带有自定义控件和自定义 StringProperty 的 Proguard

带有 xib 文件和自定义构造函数的自定义 UITableViewCell

带有 CORS 和自定义标头的 AngularJS

带有附加属性和自定义模板的 ListView GridViewColumnHeader

带有 Intent 和自定义 Listview 的 Android