我已通过 LDAP 成功连接到 Active Directory 以进行身份验证,并在我的 ldap.xml 中使用以下内容调用了我的自定义权限填充器:
<bean id="ldapAuthenticationProvider"
class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
<constructor-arg ref="ldapBindAuthenticator"/>
<constructor-arg ref="ldapAuthoritiesPopulator"/>
</bean>
<bean id="ldapBindAuthenticator"
class="org.springframework.security.ldap.authentication.BindAuthenticator">
<constructor-arg ref="ldapServer"/>
<property name="userSearch" ref="ldapSearch"/>
</bean>
<bean id="ldapSearch"
class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
<constructor-arg value="CN=Users"/>
<constructor-arg value="(sAMAccountName={0})"/>
<constructor-arg ref="ldapServer"/>
</bean>
<bean id="ldapAuthoritiesPopulator"
class="my.project.package.ActiveDirectoryLdapAuthoritiesPopulator"/>
<bean id="ldapServer"
class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
<constructor-arg value="ldap://192.168.0.2/dc=test,dc=server"/>
<property name="userDn" value="ldap@test.server"/>
<property name="password" value="ldap"/>
<property name="baseEnvironmentProperties">
<map>
<entry key="java.naming.referral">
<value>follow</value>
</entry>
</map>
</property>
</bean>
这很好用,我可以根据用户的组成员身份确定用户的授权,但我宁愿通过内置的 Active Directory LDAP 身份验证提供程序来执行此操作:
<bean id="ldapAuthenticationProvider"
class="org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider">
<constructor-arg value="test.server"/>
<constructor-arg value="ldap://192.168.0.2:389"/>
<property name="convertSubErrorCodesToExceptions" value="true"/>
</bean>
上面的问题是我的自定义权限填充器(显然)没有被调用,所以虽然我可以验证我的用户(适用于上述),但我没有组(我需要确定授权)。
我觉得这是一个简单的问题,但对于我的生活,我无法在这里或其他任何地方找到答案。我是否必须扩展 ActiveDirectoryLdapAuthenticationProvider 类,并从那里调用我的权限填充器?
(感谢这个网站多年来给我的所有帮助;这个网站的有效性可以通过我最近才费心创建一个帐户这一事实来衡量,这是我的第一个问题。提前感谢你的帮助。)