
<ldap-authentication-provider user-search-filter="(uid={0})" user-search-base="ou=people"/>
如果使用了上面的服务器定义,它会在DNou=people,dc=springframework,dc=org下执行搜索,使用user-search-filter里的值作为过滤条件。然后把用户登录名作为过滤名称的一个参数。如果没有提供user-search-base,搜索将从根开始。
如果从LDAP目录的组里读取权限信息呢,这是通过下面的属性控制的。
group-search-base。定义目录树部分,哪个组应该执行搜索。
group-role-attribute。这个属性包含了组入口中定义的权限名称。默认是cn
group-search-filter。这个过滤器用来搜索组的关系。默认是uniqueMember={0},对应于groupOfUniqueMembersLDAP类。在这情况下,取代参数是用户的辨别名称。如果你想对登录名搜索,可以使用{1}这个参数。
因此,如果我们使用下面进行配置
<ldap-authentication-provider user-dn-pattern="uid={0},ou=people" group-search-base="ou=groups" />
并以用户“ben”的身份通过认证,在读取权限信息的子流程里,要在目录入口ou=groups,dc=springframework,dc=org下执行搜索,查找包含uniqueMember属性值为ou=groups,dc=springframework,dc=org的入口。默认,权限名都要以ROLE_作为前缀。你可以使用role-prefix属性修改它。如果你不想使用任何前缀,可以使用role-prefix="none"。要想得到更多读取权限的信息,可以查看DefaultLdapAuthoritiesPopulator类的Javadoc。
我们上面使用到的命名空间选项很容易使用,也比使用spring bean更准确。也有可能你需要知道如何配置在你的application context里配置Spring Security LDAP目录。比如,你可能想自定义一些类的行为。如果你想使用命名空间配置,你可以跳过这节,直接进入下一段。
最主要的LDAP提供器类是org.springframework.security.providers.ldap.LdapAuthenticationProvider。这个bean自己没做什么事情,而是代理了其他两个bean的工作,一个是LdapAuthenticator,一个是LdapAuthoritiesPopulator,用来处理用户认证和检索用户的GrantedAuthority属性集合。
验证者还负责检索所有需要的用户属性。这是因为对于属性的授权可能依赖于使用的验证类型比如,如果对某个用户进行绑定,它也许必须通过用户自己的授权才能进行读取。
当前Spring Security提供两种验证策略:
直接去LDAP服务器验证(“绑定”验证)。
比较密码,将用户提供的密码与资源库中保存的进行比较。这可以通过检索密码属性的值并在本地检测,或者执行LDAP“比较”操作,提供用来比较的密码是从服务器获得的,绝对不会检索真实密码的值。
在认证一个用户之前(使用任何一个策略),辨别名称(DN)必须从系统提供的登录名中获得。这可以通过,简单的模式匹配(设置setUserDnPatterns数组属性)或者设置userSearch属性。ldap认证为了实现DN模式匹配方法,一个标准的java模式格式被用到了,登录名将被参数{0}替代。这个模式应该和DN有关系,并绑定到配置好的SpringSecurityContextSource(看看那节,获得更多信息)。比如,如果你使用了LDAP服务的URL是ldap://monkeymachine.co.uk/dc=springframework,dc=org,并有一个模式uid={0},ou=greatapes,然后登录名"gorilla"会映射到DNuid=gorilla,ou=greatapes,dc=springframework,dc=org。每个配置好的DN模式将尝试进行定位,直到有一个匹配上。ldap认证使用搜索获得信息,看看下面的那节。两种方式也可以结合在一起使用 - 模式会先被检测一下,然后如果没有找到匹配的DN,就会使用搜索。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-24626-2.html
么么哒小男神
该吃吃