连接池- Spring引导安全性和LDAP: PoolingContextSource



我尝试共享ldap连接。对于Java中的配置,我发现:Spring LDAP PoolingContextSource通过注释

@Bean
public LdapContextSource ldapContextSource() {
    LdapContextSource contextSource = new LdapContextSource();
    contextSource.setUrl(ldapUrl);
    contextSource.setBase(ldapBase);
    return contextSource;
}

@Bean
public ContextSource contextSource() {
    PoolingContextSource poolingContextSource = new PoolingContextSource();
    poolingContextSource.setDirContextValidator(new DefaultDirContextValidator());
    poolingContextSource.setContextSource(ldapContextSource());
    poolingContextSource.setTestOnBorrow(true);
    poolingContextSource.setTestWhileIdle(true);
    return poolingContextSource;
}

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
    auth.ldapAuthentication()
        .contextSource(contextSource()) //Here is the Problem
        .userDnPatterns(ldapUserDnPatterns)
        .groupSearchBase(ldapGroupSearchBase)
        .groupSearchFilter(ldapGroupSearchFilter)
        .userSearchBase(ldapUserSearchBase);
}

我如何在AuthenticationManagerBuilder中设置我的PoolingContextSource ?它不是适用的类型。当我使用ldapContextSource()而不使用PoolingContextSource Bean时,只要连接不超时,它就可以工作:(

谁能给我点提示吗?

无法找到解决接口不兼容问题的好方法。这就是我所做的。


    LdapContextSource contextSource = new LdapContextSource();
    contextSource.setUrl(ldapUrl);
    contextSource.setUserDn(managerDn);
    contextSource.setPassword(managerPassword);
    contextSource.afterPropertiesSet();
    PoolConfig poolConfig = new PoolConfig();
    poolConfig.setTestOnBorrow(true);
    poolConfig.setTestWhileIdle(true);
    PooledContextSource pcs = new PooledContextSource(poolConfig);
    pcs.setDirContextValidator(new DefaultDirContextValidator());
    pcs.setContextSource(contextSource);
    auth
        .ldapAuthentication()
        .userDnPatterns(userDnPattern)
        .userSearchFilter(searchFilter)
        .userSearchBase(searchBase)
        .contextSource(new BaseLdapPathContextSource() {
          @Override
          public DirContext getReadOnlyContext() throws NamingException {
            return pcs.getReadOnlyContext();
          }
          @Override
          public DirContext getReadWriteContext() throws NamingException {
            return pcs.getReadWriteContext();
          }
          @Override
          public DirContext getContext(String principal, String credentials)
              throws NamingException {
            return contextSource.getContext(principal, credentials);
          }
          @Override
          public DistinguishedName getBaseLdapPath() {
            return pcs.getBaseLdapPath();
          }
          @Override
          public LdapName getBaseLdapName() {
            return pcs.getBaseLdapName();
          }
          @Override
          public String getBaseLdapPathAsString() {
            return pcs.getBaseLdapPathAsString();
          }
        });

最新更新