从Spring Security的不同服务器获取用户和角色

时间:2016-08-09 14:18:29

标签: spring hibernate spring-security

我有一个使用LDAP服务器进行身份验证的应用程序。它工作正常。但是,存在一个问题:在这个LDAP服务器中,我没有用户角色。我把它们放在另一台服务器上,在数据库中我的应用程序访问。我需要从现在开始将用户角色添加到应用程序中。

我想知道如何获取这些角色,并在configureGlobal方法中将它们添加到AuthenticationManagerBuilder身份验证中。有可能吗?

一些信息:

我的configureGlobal方法是:

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    auth.ldapAuthentication().userSearchFilter("uid={0}").contextSource().url(host);
}

我正在使用hibernate 4.3.8和Spring Security 4.1.1。

具有角色的表是这样创建的:

create table UserGroup (
    user varchar2(250),
    role varchar2(250)
);

记录是这样的:

[user1,role1]

[user1,role2]

[user1,role3]

[user1,role4]

[user2,role1]

[user2,role2]

如您所见,同一个用户可以拥有多个角色。可以为许多用户分配相同的角色。我知道它需要规范化,但我认为此时并不重要。

1 个答案:

答案 0 :(得分:0)

我过去所做的是实现一个UserDetailsService,它填充应用程序数据库中的用户名和角色。在AbstractUserDetailsAuthenticationProvider内执行LDAP绑定检查的additionalAuthenticationChecks

像魅力一样。

实际上,UserDetails包含一个标志,告诉我在哪里验证用户,在additionalAuthenticationChecks内,我们根据多个验证源之一验证用户,例如本地数据库,或者各种多租户LDAP服务器。