我能够与ldap联系并获得响应,但是我想我的主要对象授权机构的大小为零,其中提供了角色详细信息。 为了获得ldap角色详细信息,我还需要传递什么其他输入信息?
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication()
.userDnPatterns("uid={0},ou=TestOu")
.contextSource()
.url("ldaps://XX:768");
}
我也尝试过使用DirContextOperations对象,它包含除角色以外的许多属性,该角色在ldapit中定义,并且我可以在运行ldap查询时获得该角色, 问题仅在于春季安全性
请帮助
答案 0 :(得分:0)
“角色”对于LDAP目录服务器并没有任何意义。
LDAPv3仅了解静态组。
某些LDAP Directory Server产品允许在条目级别从“动态属性”检索组成员身份。
您可以将“角色”定义为条目的属性。
答案 1 :(得分:0)
知道了!!!!!实现自定义AuthenticationProvider和LdapAuthenticator,并使用BindAuthenticator。我们必须使用BindAuthenticator设置以下内容
authenticator.setUserDnPatterns(new String[]{"XX"});
authenticator.setUserAttributes(new String[]{"nsrole"});
在配置中
@Override 公共无效configure(AuthenticationManagerBuilder auth)引发异常{
auth.authenticationProvider(this.customLdapAuthenticationProvider());
}
@Bean(name = "ldapAuthenticationProvider")
public AuthenticationProvider customLdapAuthenticationProvider() {
LdapUserDetailsMapper userDetailsMapper = new UserMapper();
CustomLdapAuthenticationProvider provider = new CustomLdapAuthenticationProvider(this.ldapAuthenticator(),
new NullLdapAuthoritiesPopulator());
provider.setUserDetailsContextMapper(userDetailsMapper);
return provider;
}
@Bean(name = "ldapAuthenticator")
public LdapAuthenticator ldapAuthenticator() {
BindAuthenticator authenticator = new BindAuthenticator(this.contextSource());
authenticator.setUserDnPatterns(new String[] { "uid={0},ou=people" });
authenticator.setUserAttributes(new String[] { "nsrole" });
return authenticator;
}
@Bean(name = "contextSource")
public DefaultSpringSecurityContextSource contextSource() {
DefaultSpringSecurityContextSource contextSource = new DefaultSpringSecurityContextSource(ldapUrl);
return contextSource;
}
私有类UserMapper扩展了LdapUserDetailsMapper {
@Override
public UserDetails mapUserFromContext(DirContextOperations ctx, String username,
Collection<? extends GrantedAuthority> authorities) {
List<GrantedAuthority> roles = new ArrayList<GrantedAuthority>();
Attributes attrs = ctx.getAttributes();
Sysout(attr)
UserDetails userDetails = super.mapUserFromContext(ctx, username, roles);
return userDetails;
}
}