SEC-2657: LdapAuthenticationProviderConfigurer find available port
This commit is contained in:
parent
63d1b531a1
commit
a2b53fabce
|
@ -42,6 +42,9 @@ import org.springframework.security.ldap.userdetails.PersonContextMapper;
|
||||||
import org.springframework.security.ldap.userdetails.UserDetailsContextMapper;
|
import org.springframework.security.ldap.userdetails.UserDetailsContextMapper;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.ServerSocket;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configures LDAP {@link AuthenticationProvider} in the {@link ProviderManagerBuilder}.
|
* Configures LDAP {@link AuthenticationProvider} in the {@link ProviderManagerBuilder}.
|
||||||
*
|
*
|
||||||
|
@ -404,7 +407,8 @@ public class LdapAuthenticationProviderConfigurer<B extends ProviderManagerBuild
|
||||||
private String ldif = "classpath*:*.ldif";
|
private String ldif = "classpath*:*.ldif";
|
||||||
private String managerPassword;
|
private String managerPassword;
|
||||||
private String managerDn;
|
private String managerDn;
|
||||||
private int port = 33389;
|
private Integer port;
|
||||||
|
private static final int DEFAULT_PORT = 33389;
|
||||||
private String root = "dc=springframework,dc=org";
|
private String root = "dc=springframework,dc=org";
|
||||||
private String url;
|
private String url;
|
||||||
|
|
||||||
|
@ -449,7 +453,7 @@ public class LdapAuthenticationProviderConfigurer<B extends ProviderManagerBuild
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The port to connect to LDAP to (the default is 33389).
|
* The port to connect to LDAP to (the default is 33389 or random available port if unavailable).
|
||||||
* @param port the port to connect to
|
* @param port the port to connect to
|
||||||
* @return the {@link ContextSourceBuilder} for further customization
|
* @return the {@link ContextSourceBuilder} for further customization
|
||||||
*/
|
*/
|
||||||
|
@ -509,14 +513,43 @@ public class LdapAuthenticationProviderConfigurer<B extends ProviderManagerBuild
|
||||||
return contextSource;
|
return contextSource;
|
||||||
}
|
}
|
||||||
ApacheDSContainer apacheDsContainer = new ApacheDSContainer(root, ldif);
|
ApacheDSContainer apacheDsContainer = new ApacheDSContainer(root, ldif);
|
||||||
apacheDsContainer.setPort(port);
|
apacheDsContainer.setPort(getPort());
|
||||||
postProcess(apacheDsContainer);
|
postProcess(apacheDsContainer);
|
||||||
return contextSource;
|
return contextSource;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int getPort() {
|
||||||
|
if(port == null) {
|
||||||
|
port = getDefaultPort();
|
||||||
|
}
|
||||||
|
return port;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getDefaultPort() {
|
||||||
|
ServerSocket serverSocket = null;
|
||||||
|
try {
|
||||||
|
try {
|
||||||
|
serverSocket = new ServerSocket(DEFAULT_PORT);
|
||||||
|
} catch (IOException e) {
|
||||||
|
try {
|
||||||
|
serverSocket = new ServerSocket(0);
|
||||||
|
} catch(IOException e2) {
|
||||||
|
return DEFAULT_PORT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return serverSocket.getLocalPort();
|
||||||
|
} finally {
|
||||||
|
if(serverSocket != null) {
|
||||||
|
try {
|
||||||
|
serverSocket.close();
|
||||||
|
} catch (IOException e) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private String getProviderUrl() {
|
private String getProviderUrl() {
|
||||||
if(url == null) {
|
if(url == null) {
|
||||||
return "ldap://127.0.0.1:" + port + "/" + root;
|
return "ldap://127.0.0.1:" + getPort() + "/" + root;
|
||||||
}
|
}
|
||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue