我有一个使用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]
如您所见,同一个用户可以拥有多个角色。可以为许多用户分配相同的角色。我知道它需要规范化,但我认为此时并不重要。
答案 0 :(得分:0)
我过去所做的是实现一个UserDetailsService
,它填充应用程序数据库中的用户名和角色。在AbstractUserDetailsAuthenticationProvider
内执行LDAP绑定检查的additionalAuthenticationChecks
。
像魅力一样。
实际上,UserDetails
包含一个标志,告诉我在哪里验证用户,在additionalAuthenticationChecks
内,我们根据多个验证源之一验证用户,例如本地数据库,或者各种多租户LDAP服务器。