带有 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-provider
的user-details-class
属性配置。如果您使用自己的上下文映射器,请使用属性user-context-mapper-ref
对其进行配置。
【讨论】:
介意如何配置 ldap-authentication-provider 的上述 user-details-class 属性?谢谢! 事情是我使用 来配置身份验证提供程序,并且似乎没有用户上下文映射器引用。你建议如何进行呢?谢谢! @dade 如果您有自己的提供程序,那么您可以配置类似于 OP 的代码,除了您将使用<ldap-authentication-provider server-ref="contextSource"/>
而不是 <authentication-provider ref="ldapAuthProvider"/>
谢谢@Ritesh。找出为什么东西不起作用。问题是项目特定的。一些 Spring 配置的覆盖正在进行,我最初并没有意识到。以上是关于带有 LDAP 和自定义 UserDetailsContextMapper 的 Spring Security的主要内容,如果未能解决你的问题,请参考以下文章
带有自定义控件和自定义 StringProperty 的 Proguard
带有 xib 文件和自定义构造函数的自定义 UITableViewCell