在使用LDAP和Spring安全性时定义角色的位置和方式



我正在使用Spring Security并从LDAP数据库进行身份验证。身份验证工作正常,但我无法使用角色!

在 spring-security 中.xml有这个标签:

<security:intercept-url pattern="/app/main/admin" access="hasRole('ROLE_USER')"/>

我的问题是,"ROLE_USER"在哪里定义?如何使用户属于特定角色?这是否发生在 LDAP 数据库中?如果是,那么我该怎么做?我对LDAP知之甚少。它是我定义角色的另一个配置文件吗?

谢谢你的帮助。

我知道有两种方法可以在LDAP身份验证后为用户分配角色。

  1. 我们可以根据用户在LDAP数据库中的角色将用户划分为不同的组,并将这些组映射到不同的角色。

请参阅此处 : 如何将AD组映射到用户角色 Spring 安全性 LDAP

  1. 我们可以使用LDAP身份验证对用户进行身份验证,并使用我们的本地数据库进行授权。

配置

    <beans:bean id="ldapAuthProvider"  class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
    <beans:constructor-arg name="authenticator">
        <beans:bean
            class="org.springframework.security.ldap.authentication.BindAuthenticator">
            <beans:constructor-arg ref="contextSource" />
            <beans:property name="userSearch">
                <beans:bean
                    class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
                    <beans:constructor-arg name="searchBase"
                        value="ou=example,dc=springframework,dc=org" />
                    <beans:constructor-arg name="searchFilter"
                        value="(uid={0})" />
                    <beans:constructor-arg name="contextSource"
                        ref="contextSource" />
                </beans:bean>
            </beans:property>
        </beans:bean>
    </beans:constructor-arg>
    <beans:constructor-arg name="authoritiesPopulator"
        ref="myLDAPAuthPopulator" />
</beans:bean>

<authentication-manager alias="authenticationManager">
<authentication-provider ref="ldapAuthProvider" />
</authentication-manager>

myLDAPAuthPopulator的实现:

@Component("myLDAPAuthPopulator")
public class MyLdapAuthoritiesPopulator implements LdapAuthoritiesPopulator   {
@Autowired
private UserDao userDao;
@Override
public Collection<? extends GrantedAuthority> getGrantedAuthorities(
    DirContextOperations userData, String username) {
List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
List<String> roleList = userDao.getRoles(username);
if (!roleList.isEmpty()) {
     for (String role : roleList) {
        System.out.println(role);
        authorities.add(new SimpleGrantedAuthority(role));
    }
}
else
{
 //We know that user is authenticated. So you can add a role here and save it in the database. 
}
return authorities;
}

最新更新