2

LDAP 認証の後、ユーザー ID がユーザー テーブルにリストされているかどうかをデータベースと照合したいと考えています。

どうすればこれを達成できますか? Google で確認できるのは、LDAP による認証と、データベースでのユーザー ロールの取得だけです。

4

1 に答える 1

3

ユーザー Prancipal を持つ方法を変更する必要があります。

ldapProvider を保持します。

<beans:bean id="ldapProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">   

....

<beans:bean id="customUserDetailsMapper" class="xxxxx.CustomUserDetailsMapper">
    <beans:constructor-arg ref="customUserDetailService" />
</beans:bean>

<beans:bean id="customUserDetailService" class="xxxxxx.CustomUserDetailService">
</beans:bean>

カスタム UserDatailsMapper を定義します。

public class CustomUserDetailsMapper extends LdapUserDetailsMapper {

private UserDetailsService userDetailService;

public CustomUserDetailsMapper (UserDetailsService userDetailService) {
    this.userDetailService = userDetailService;
}

@Override
public UserDetails mapUserFromContext(DirContextOperations ctx,
        String username, Collection<? extends GrantedAuthority> authorities) {

    return (UserDetails) this.userDetailService.loadUserByUsername(username);
}

}

カスタム UserDetailsS​​ervice も定義します。

public class CustomUserDetailService implements UserDetailsService {


@Autowired
protected UserRepository userRepository;

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    UserDb user = userRepository.findByUserName(username);

    if (UserDb  == null) {
        throw new UsernameNotFoundException(username);
    }           

    // Construct customUserDetails

    return (UserDetails)customUserDetails;
}
于 2013-09-11T11:09:37.230 に答える