Setting a timeout value for LDAP authentication in Spring

I use Spring LDAP authentication through:

auth
            .ldapAuthentication()
            .userSearchFilter("userPrincipalName={0}")
            .contextSource()
            .managerDn(ldapAuthenticationConfig.getManagerDn())
            .managerPassword(ldapAuthenticationConfig.getManagerPassword())
            .url(ldapAuthenticationConfig.getUrl());

However, the login page, when the LDAP server is unavailable, takes too much time. I want to find out if I can log in or not for a significant amount of time.

Here is the dependency I'm using:

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-ldap</artifactId>
    </dependency>

How to set a timeout value for LDAP authentication in spring boot?

+4
source share
1 answer

I also ran into this problem and found some answers pointing to an environment variable com.sun.jndi.ldap.connect.timeout, but couldn't find how to add Spring Security with Java configuration in Spring.

, :

@Autowired
private DefaultSpringSecurityContextSource context;

@Autowired
public void configureGlobal(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
    authenticationManagerBuilder
                .ldapAuthentication()
                .userSearchFilter(LDAP_USER_SEARCH_FILTER)
                .contextSource(context);
}

, ( confiuration, ), , timeout:

@Bean
public DefaultSpringSecurityContextSource createContext() {
    DefaultSpringSecurityContextSource contextSource = new DefaultSpringSecurityContextSource(LDAP_SERVER);
    contextSource.setUserDn(LDAP_MANAGER_DN);
    contextSource.setPassword(LDAP_MANAGER_PASSWORD);

    Map<String, Object> environment = new HashMap<>();
    environment.put("com.sun.jndi.ldap.connect.timeout", LDAP_TIMEOUT);
    contextSource.setBaseEnvironmentProperties(environment);
    return contextSource;
}

, LDAP_ - .

0

Source: https://habr.com/ru/post/1671074/


All Articles