1

Windows AD LDAP で Spring セキュリティ 3.2.4 を使用しています。認証に成功し、LdapUserDetailsImpl が入力されました。LdapUserDetailsImpl からユーザー名、権限を取得できますが、従業員名 (ログイン ユーザー名ではありません) を取得する方法 LdapUserDetailsImpl には、次のプロパティと値が含まれています

Username = 40000 , 
Enabled = true,
AccountNonExpired = true,
Dn: cn=employee name,ou=IT_FM,ou=XXX_USERS,dc=XXXX,dc=CO,dc=IN;

従業員名を取得するにはどうすればよいですか。一部のクラスを拡張して独自のマッピングを作成する必要がありますか、それとも単にプリンシパルから Dn を取得し、文字列を分割して従業員名を取得する必要がありますか。

4

3 に答える 3

0

私のカスタムマッパー。これは正しい方法ですか?

 @Service
    public class MyUserDetailsContextMapper extends LdapUserDetailsMapper implements UserDetailsContextMapper {
        @Override
        public UserDetails mapUserFromContext(DirContextOperations ctx, String username, Collection<? extends GrantedAuthority> authorities) {
            LdapUserDetailsImpl ldapUserDetailsImpl = (LdapUserDetailsImpl) super.mapUserFromContext(ctx, username, authorities);
            MyUserDetails myUserDetails = new MyUserDetails();
            myUserDetails.setAccountNonExpired(ldapUserDetailsImpl.isAccountNonExpired());
            myUserDetails.setAccountNonLocked(ldapUserDetailsImpl.isAccountNonLocked());
            myUserDetails.setCredentialsNonExpired(ldapUserDetailsImpl.isCredentialsNonExpired());
            myUserDetails.setEnabled(ldapUserDetailsImpl.isEnabled());
            myUserDetails.setUsername(ldapUserDetailsImpl.getUsername());
            myUserDetails.setAuthorities(ldapUserDetailsImpl.getAuthorities());
            String dn = ldapUserDetailsImpl.getDn();
            int beginIndex = dn.indexOf("cn=") + 3;
            int endIndex = dn.indexOf(",");
            myUserDetails.setEmployeeName(dn.substring(beginIndex, endIndex));
            return myUserDetails;
        }

    }
于 2014-12-26T16:35:53.077 に答える