浏览代码

SEC-619: LdapUserDetailsService implementation.

Luke Taylor 17 年之前
父节点
当前提交
b12a4939df

+ 44 - 0
core/src/main/java/org/springframework/security/userdetails/ldap/LdapUserDetailsService.java

@@ -0,0 +1,44 @@
+package org.springframework.security.userdetails.ldap;
+
+import org.springframework.security.GrantedAuthority;
+import org.springframework.security.ldap.LdapUserSearch;
+import org.springframework.security.providers.ldap.LdapAuthoritiesPopulator;
+import org.springframework.security.userdetails.UserDetails;
+import org.springframework.security.userdetails.UserDetailsService;
+import org.springframework.security.userdetails.UsernameNotFoundException;
+import org.springframework.ldap.core.DirContextOperations;
+import org.springframework.util.Assert;
+
+/**
+ * LDAP implementation of UserDetailsService based around an {@link LdapUserSearch}
+ * and an {@link LdapAuthoritiesPopulator}. The final <tt>UserDetails</tt> object
+ * returned from <tt>loadUserByUsername</tt> is created by the configured <tt>UserDetailsContextMapper</tt>.
+ *
+ * @author Luke Taylor
+ * @version $Id$
+ */
+public class LdapUserDetailsService implements UserDetailsService {
+    private LdapUserSearch userSearch;
+    private LdapAuthoritiesPopulator authoritiesPopulator;
+    private UserDetailsContextMapper userDetailsMapper = new LdapUserDetailsMapper();
+
+    public LdapUserDetailsService(LdapUserSearch userSearch, LdapAuthoritiesPopulator authoritiesPopulator) {
+        Assert.notNull(userSearch, "userSearch must not be null");
+        Assert.notNull(authoritiesPopulator, "authoritiesPopulator must not be null");
+        this.userSearch = userSearch;
+        this.authoritiesPopulator = authoritiesPopulator;
+    }
+
+    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+        DirContextOperations userData = userSearch.searchForUser(username);
+
+        GrantedAuthority[] authorities = authoritiesPopulator.getGrantedAuthorities(userData, username);
+
+        return userDetailsMapper.mapUserFromContext(userData, username, authorities);
+    }
+
+    public void setUserDetailsMapper(UserDetailsContextMapper userDetailsMapper) {
+        Assert.notNull(userDetailsMapper, "userDetailsMapper must not be null");
+        this.userDetailsMapper = userDetailsMapper;
+    }
+}