您好我不确定LDAP和弹簧安全性。我有一个要求,因为应用程序身份验证必须由LDAP执行,授权机制必须由应用程序层处理。我正在使用具有Spring安全性实现的Jhipster。但是,我可以连接到LDAP并验证用户身份。
现在授权机制必须由应用层处理,我可以在那里管理权限。因此,如果用户在用户身份验证过程之后不存在,我想到将用户信息从LDAP复制到应用程序层数据库。那么如何使用Spring安全框架实现这一点呢。如何拦截过滤器链或某些过程来执行此操作。
最后这是一个好方法,还是有更好的方法来解决这个问题。
答案 0 :(得分:2)
这就是我在项目中实现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>
自定义机构Populator:
@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>();
User user = userDao.searchUser(username);
List<String> roleList = userDao.getRoles(username);
if (!roleList.isEmpty()) {
for (String role : roleList) {
System.out.println(role);
authorities.add(new SimpleGrantedAuthority(role));
}
}
return authorities;
}