WebアプリでLDAPを使用したSpringセキュリティを使用してログイン用の成功ハンドラーを実装しようとしました。オンラインで検索した後、私が見つけた唯一の方法は、次のようなカスタムユーザー詳細マッパーを実装することでした。
public class CustomUserDetailsMapper extends LdapUserDetailsMapper{
private static final String ROLE_NORMAL_USER = "Normal User";
private static final String ROLE_ADMIN = "Administrator";
@Override
public UserDetails mapUserFromContext(DirContextOperations ctx,
String username, Collection<? extends GrantedAuthority> authority) {
UserDetails originalUser = super.mapUserFromContext( ctx, username, authority );
originalUser.getAuthorities();
Set<AndaAuthority> roles = EnumSet.noneOf(AndaAuthority.class);
roles.add(AndaAuthority.ROLE_ADMIN);
for (GrantedAuthority auth : authority) {
if (ROLE_NORMAL_USER.equalsIgnoreCase(auth.getAuthority())) {
roles.add(AndaAuthority.ROLE_USER);
} else if (ROLE_ADMIN.equalsIgnoreCase(auth.getAuthority())) {
roles.add(AndaAuthority.ROLE_ADMIN);
}
}
SecurityContextHolder.getContext().getAuthentication().getCredentials();
User newUser =
new User(
originalUser.getUsername(),
originalUser.getPassword() != null? originalUser.getPassword():"",
originalUser.isEnabled(),
originalUser.isAccountNonExpired(),
originalUser.isCredentialsNonExpired(),
originalUser.isAccountNonLocked(),
roles );
return newUser;
}
}
これは機能していました。ここにブレークポイントを設定すると、停止しました。しかし、そのような場合のハンドラーを実装するためのより良い方法はありますか?つまり、認証部分全体が「内部」で行われ、何かがうまくいかず、このメソッドが呼び出されない場合、実際にデバッグすることはできません。途中でどこがうまくいかなかったかを知る方法は他にありません。
ありがとうございました