Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring安全LDAP成功处理程序_Java_Spring_Authentication_Spring Security_Ldap - Fatal编程技术网

Java Spring安全LDAP成功处理程序

Java Spring安全LDAP成功处理程序,java,spring,authentication,spring-security,ldap,Java,Spring,Authentication,Spring Security,Ldap,我已经尝试在我的web应用程序中使用带LDAP的Spring security实现一个登录成功处理程序。在线搜索后,我找到的唯一方法是实现自定义用户详细信息映射器,如下所示: public class CustomUserDetailsMapper extends LdapUserDetailsMapper{ private static final String ROLE_NORMAL_USER = "Normal User"; private static final String ROL

我已经尝试在我的web应用程序中使用带LDAP的Spring security实现一个登录成功处理程序。在线搜索后,我找到的唯一方法是实现自定义用户详细信息映射器,如下所示:

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;
}
}
公共类CustomUserDetailsMapper扩展了LdapUserDetailsMapper{
私有静态最终字符串角色\u NORMAL\u USER=“NORMAL USER”;
私有静态最终字符串角色\u ADMIN=“Administrator”;
@凌驾
公共用户详细信息mapUserFromContext(DirContextOperations ctx,
字符串用户名,集合供任何其他想知道:
您必须将成功处理程序声明为bean,以便在Spring安全配置中链接它

实施情况良好, 您只需在
配置标记中声明
身份验证成功处理程序ref
,并覆盖
onAuthenticationSuccess
方法


可能还有其他更好的解决方案,但这就是我在我的案例中发现并使用的解决方案。

你的问题是什么还不清楚,因为你实际上没有说你想做什么。还有,你所说的“幕后操纵”是什么意思?您可以在任何Spring安全类中轻松添加断点,在IDE中将源代码添加到您的项目中是很简单的。因此,您不能调试并不是真的。从Java的角度来看,它只是应用程序的另一部分。我正试图覆盖Spring安全性中的默认onSuccess或类似的内容,以了解何时无法调试他登录成功与否,并在每种情况下执行不同的操作。这通常取决于“操作”的具体内容。您可以使用
AuthenticationSuccessHandler
。您可以在网站和参考手册的其他地方找到这一点。