2
我試圖在Web應用程序中使用Spring安全性與LDAP實現登錄成功處理程序。網上搜索後,我發現的唯一途徑是實現像這樣一個自定義的用戶信息映射:春季安全LDAP成功處理程序
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;
}
}
這是工作 - 當我把一個斷點在這裏停止。但是,有沒有更好的方法來實現這種情況下的處理程序?我的意思是,整個身份驗證部分完成「引擎蓋下」,我不能真正調試,如果出現錯誤,並沒有調用這個方法,我沒有其他方式知道在路上出了什麼問題。
謝謝
目前還不清楚你的問題是什麼,因爲你沒有真正說出你想做什麼。另外,你是什麼意思「引擎蓋下」?您可以輕鬆地在任何Spring Security類中添加斷點,並且在IDE中將源代碼添加到項目中並不重要。所以這是不正確的,你不能調試。從Java的角度來看,它只是應用程序的另一部分。 –
我想重寫默認的onSuccess或類似的東西從春季安全知道登錄是否成功/或不是每個情況下做不同的操作。 – AndaP
那麼,它仍然一般取決於「操作」是什麼。你可以使用'AuthenticationSuccessHandler'。您可以在網站的其他地方和參考手冊中找到它們。 –