当前位置: 首页 > 知识库问答 >
问题:

Spring SecurityLDAP检查空密码

佘飞鸣
2023-03-14

我在我的应用程序中使用LDAP身份验证。我使用以下代码:

@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
    String domain = customProperties.getAdDomain();
    String url = customProperties.getAdUrl();
    ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider(domain,url);
    provider.setConvertSubErrorCodesToExceptions(true);
    provider.setUseAuthenticationRequestCredentials(true);
    provider.setUserDetailsContextMapper(userDetailsContextMapper());
    auth.authenticationProvider(provider);
    auth.userDetailsService(new MyUserDetailsService());
}

使用空密码进行身份验证。我知道我需要插入一个空密码检查,因为在这种情况下并不是所有的LDAP服务器都返回错误。如何以及在哪里插入空白密码的检查更好?

共有1个答案

禄星腾
2023-03-14

除了使用activedirectoryldaphauthenticationprovider,您还可以使用Spring的LdapTemplate来定制如何根据LdapServer认证用户的实现。您可以参考这里和这里的建议来配置LDAP模板。

然后,您可以创建一个CustomAuthenticationProvider类来处理身份验证。

customauthenticationprovider . class

public class CustomAuthenticationProvider implement AuthenticationProvider{

  @Autowired
  private LdapTemplate ldapTemplate;

  @Override
  public Authentication authenticate(Authentication auth) throws AuthenticationException{
    String username = auth.getName;
    String password = auth.getCredentials().toString();

    .. Your code to check whether password is blank ..

    AndFilter andFilter = new AndFilter();
    andFilter.and(new EqualFilter("<LDAP USER ATTRIBUTE>",username))
          .and(new EqualFilter("<LDAP GROUP ATTRIBUTE>","<USER GROUP>"));

    boolean isValidUser = ldapTemplate.authenticate("",andFilter.encode(),password);

    ... Your code to complete the authentication ...

{

我更喜欢这种方法,因为它可以更好地控制如何对用户进行身份验证。这是我以前实现的示例的链接。

 类似资料:
  • 我试图检查密码,我加密之前,但我得到一个例外,我不知道为什么。 这里是我用来加密密码的方法: 加密工作成功。 此处为错误日志: 有什么想法吗?感谢你的帮助.

  • 本文向大家介绍sitecore 空/空检查,包括了sitecore 空/空检查的使用技巧和注意事项,需要的朋友参考一下 示例 IsNotNull 这是一种非常简单且流行的方法,用于检查项目是否不为空。它只是检查传入的对象是否为空。 IsNotNullOrEmpty 这与上面的IsNotNull相同,但是适用于字符串值而不是对象。 一片空白 这只是该IsNotNull()方法的逆过程。此方法断言该对

  • 如果在除 之外的任何上下文中访问未定义的变量,您将得到一个错误 我发现,在Ryan的回答中♦, maerics和nwellnhof,即使没有为函数提供参数,其参数变量也总是声明的。这一事实也证明下面列表中的第一项是错误的。 据我了解,可能会出现以下情况: > 函数的参数为(或),在这种情况下,已保护内部代码,呈现

  • 我想知道是否有可能在Java中“避免”空检查,以下面的代码为例: 它必须检查4次,否则代码将失败。 是否可以将语句转换为只有在没有NullPointerException时才执行的一行式语句?当出现异常时,该行应该被忽略。 这里我不是在谈论一个通用的语言特性,我是在谈论一个只有当您明确决定这样做时才会上交的特性。 例如:将是建议代码的一个片段。 在Java可能发生这样的事情吗? 如果不可能的话,在

  • 有人能解释一下<code>是可选的</code>如何帮助我们避免<code>NullPointerException</code>吗? 这段代码不是也容易出现<code>NullPointerException</code>吗?如果是这样的话,那么为什么这个代码比其他代码更受欢迎 除了帮助我们了解函数是否实际具有返回值之外,还提供了什么可能的好处

  • 有人能解释一下如何帮助我们避免? 这段代码不是也容易出现吗?如果是这样的话,那么为什么这个代码比 除了帮助我们了解函数是否实际具有返回值之外,还有什么可能的好处