这里建立了一个提供器,访问LDAP服务,URL是ldap://monkeymachine:389/dc=springframework,dc=org。认证会被执行,尝试绑定这个DNuid=<user-login-name>,ou=people,dc=springframework,dc=org。在成功认证之后,会通过查找下面的DNou=groups,dc=springframework,dc=org使用默认的过滤条件(member=<user's-DN>),将角色分配给用户。角色名会通过每个匹配的“ou”属性获得。
要配置用户的搜索对象,使用过滤条件(uid=<user-login-name>)替代DN匹配(或附加到它上面),你需要配置下面的bean
<bean id="userSearch"
class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
<constructor-arg index="0" value=""/>
<constructor-arg index="1" value="(uid={0})"/>
<constructor-arg index="2" ref="contextSource" />
</bean>
并使用它,设置认证者的userSearch属性。这个认证者会调用搜索对象,在尝试绑定到用户之前获得正确的用户DN。
使用LdapAuthenticationProvider进行认证的结果,和使用普通Spring Security认证一样,都要使用标准UserDetailsService接口。它会创建一个UserDetails对象,并保存到返回的Authentication对象里。在使用UserDetailsService时,常见的需求是可以自定义这个实现,添加额外的属性。在使用LDAP的时候,这些基本都来自用户入口的属性。UserDetails对象的创建结果被提供者的UserDetailsContextMapper策略控制,它负责在用户对象和LDAP环境数据之间进行映射:
public intece UserDetailsContextMapper {
UserDetails mapUserFromContext(DirContextOperations ctx, String username, GrantedAuthority[] authority);
void mapUserToContext(UserDetails user, DirContextAdapter ctx);
}
只有第一个方法与认证有关。如果你提供这个接口的实现,你可以精确控制如何创建UserDetails对象。第一个参数是Spring LDAP的DirContextOperations实例,他给你访问加载的LDAP属性的通道。username参数是用来认证的名字,最后一个参数是从用户加载的授权列表。]
环境数据加载的方式不同,视乎你采用的认证方法。使用BindAuthenticatior,从绑定操作返回的环境会用来读取属性,否则数据会通过标准的环境,从配置好的ContextSource获得(当测试配置好定位用户,这会从搜索对象中获得数据)。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-24626-4.html
同样纠结中
中国人在汉朝就已确立一夫一妻