簡體   English   中英

Spring Security LDAP成功處理程序

[英]Spring security LDAP success handler

我已經嘗試在我的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;
}
}

這很有效-當我在此處放置斷點時,它停止了。 但是,是否有更好的方法來實現這種情況的處理程序? 我的意思是,整個身份驗證部分都是在“幕后”完成的,如果出現問題並且沒有調用此方法,我將無法真正調試。我沒有其他方法可以知道問題出在哪里。

謝謝

對於其他任何想知道的人:您必須將成功處理程序聲明為Bean,以便可以在Spring安全配置中將其鏈接。

此處的實現效果很好,您只需在<form-login>配置標記中聲明您的authentication-success-handler-ref並覆蓋onAuthenticationSuccess方法。

可能存在其他更好的解決方案,但這是我在我的案例中找到並使用的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM