【问题标题】:Spring security LDAP success handlerSpring 安全 LDAP 成功处理程序
【发布时间】:2012-09-30 21:41:07
【问题描述】:

我尝试在我的 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;
}
}

这是有效的——当我在这里设置断点时它停止了。但是,有没有更好的方法来为这种情况实现处理程序?我的意思是,整个身份验证部分是在“幕后”完成的,如果出现问题并且没有调用此方法,我无法真正调试,我没有其他方法可以知道哪里出了问题。

谢谢

【问题讨论】:

  • 不清楚您的问题是什么,因为您实际上并没有说出您要做什么。另外,您所说的“引擎盖下”是什么意思?您可以很容易地在任何 Spring Security 类中添加断点,并且在 IDE 中将源代码添加到您的项目中是微不足道的。所以不能调试是不正确的。从 Java 的角度来看,它只是应用程序的另一部分。
  • 我正在尝试覆盖默认的 onSuccess 或 Spring security 中的类似内容,以了解登录何时成功/失败,并在每种情况下执行不同的操作。
  • 嗯,它通常仍然取决于“操作”到底是什么。您可以使用AuthenticationSuccessHandler。您会在网站的其他地方和参考手册中找到描述的内容。

标签: java spring authentication spring-security ldap


【解决方案1】:

对于其他想知道的人: 您必须将成功处理程序声明为 bean,以便可以在 Spring 安全配置中链接它。

here 的实现效果很好, 你只需要在你的&lt;form-login&gt; 配置标签中声明你的authentication-success-handler-ref 并覆盖onAuthenticationSuccess 方法。

可能存在其他更好的解决方案,但这是我发现并在我的案例中工作的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 2014-12-25
    • 2015-01-17
    • 2015-06-03
    • 1970-01-01
    • 2014-10-26
    • 2014-02-15
    相关资源
    最近更新 更多