java - Spring 安全 LDAP 成功处理程序

标签 java spring authentication spring-security ldap

我尝试在我的 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 安全配置中。

来自 here 的实现效果很好, 你只需要申报你的authentication-success-handler-ref在你的<form-login>配置标签并覆盖 onAuthenticationSuccess方法。

可能存在其他更好的解决方案,但这是我找到并在我的案例中使用的解决方案。

关于java - Spring 安全 LDAP 成功处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12818992/

相关文章:

spring - Java 配置与组件扫描注释

java - Mockito 与 JavaMailSender

java - 如何将文章 id 传递给 "View Article"Activity

java - JBoss 与 Tomcat - StringUtils.isEmpty

java - AsyncTask 中的 Runnable 是否会阻止服务/Activity ?它对我有用

javascript - 如何从 jsp 中列出数据库数据并将其打印出来?

android - 使用 Parse Twitter/Facebook 身份验证注销或切换帐户

javascript - meteor 允许/拒绝规则

authentication - 要求用户名/密码+注册的批处理文件

java - Spring Security 和 Synchronizer Token J2EE 模式,身份验证失败时出现问题