LDAP 認証の後、ユーザー ID がユーザー テーブルにリストされているかどうかをデータベースと照合したいと考えています。
どうすればこれを達成できますか? Google で確認できるのは、LDAP による認証と、データベースでのユーザー ロールの取得だけです。
LDAP 認証の後、ユーザー ID がユーザー テーブルにリストされているかどうかをデータベースと照合したいと考えています。
どうすればこれを達成できますか? Google で確認できるのは、LDAP による認証と、データベースでのユーザー ロールの取得だけです。
ユーザー 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);
}
}
カスタム UserDetailsService も定義します。
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;
}