Package com.unboundid.util
Class HTTPProxySocketFactory
java.lang.Object
javax.net.SocketFactory
com.unboundid.util.HTTPProxySocketFactory
@NotMutable
@ThreadSafety(level=COMPLETELY_THREADSAFE)
public final class HTTPProxySocketFactory
extends SocketFactory
This class provides an implementation of a socket factory that can be used
to forward traffic through an HTTP proxy server. Because of limitations in
the Java support for HTTP proxy servers, the following constraints will be
imposed:
-
Communication with the proxy server itself cannot be encrypted. However,
it is possible to encrypt all communication through the proxy server to
the actual target server using TLS (by providing an
SSLSocketFactoryinstance when creating theHTTPProxySocketFactory), in which case the data will still be protected from the client to that target server, and anyone observing the communication between the client and the HTTP proxy, or between the HTTP proxy and the target server, would not be able to decipher that communication. - This implementation only provides direct support for proxy servers that do not require authentication. Although it may potentially be possible to configure authentication using Java system properties, this implementation does not provide any direct support for authentication.
Example
The following example demonstrates the process for establishing an LDAPS connection through a HTTP proxy server:
final String httpProxyServerAddress = "http-proxy.example.com";
final int httpProxyServerPort = 3128;
final int connectTimeoutMillis = 10_000;
final SSLUtil sslUtil =
new SSLUtil(new TrustStoreTrustManager("/path/to/trust/store"));
final SSLSocketFactory ldapsSocketFactory =
sslUtil.createSSLSocketFactory();
final HTTPProxySocketFactory httpProxySocketFactory =
new HTTPProxySocketFactory(httpProxyServerAddress,
httpProxyServerPort, connectTimeoutMillis,
ldapsSocketFactory);
final String ldapsServerAddress = "ds.example.com";
final int ldapsServerPort = 636;
try (LDAPConnection conn = new LDAPConnection(httpProxySocketFactory,
ldapsServerAddress, ldapsServerPort))
{
// Do something with the connection here.
}
-
Constructor Summary
ConstructorsConstructorDescriptionHTTPProxySocketFactory(String httpProxyHost, int httpProxyPort, int connectTimeoutMillis) Creates a new instance of this HTTP socket factory with the provided settings.HTTPProxySocketFactory(String httpProxyHost, int httpProxyPort, int connectTimeoutMillis, SSLSocketFactory sslSocketFactory) Creates a new instance of this HTTP socket factory with the provided settings. -
Method Summary
Modifier and TypeMethodDescriptionfinal SocketCreates an unconnected socket that will use the configured proxy server for communication.final SocketcreateSocket(String host, int port) Creates a new socket that is connected to the specified system through the proxy server.final SocketcreateSocket(String host, int port, InetAddress localHost, int localPort) Creates a new socket that is connected to the specified system through the proxy server.final SocketcreateSocket(InetAddress host, int port) Creates a new socket that is connected to the specified system through the proxy server.final SocketcreateSocket(InetAddress host, int port, InetAddress localHost, int localPort) Creates a new socket that is connected to the specified system through the proxy server.Methods inherited from class javax.net.SocketFactory
getDefault
-
Constructor Details
-
HTTPProxySocketFactory
public HTTPProxySocketFactory(@NotNull String httpProxyHost, int httpProxyPort, int connectTimeoutMillis) Creates a new instance of this HTTP socket factory with the provided settings. The resulting socket factory will provide support for unencrypted LDAP communication.- Parameters:
httpProxyHost- The address of the HTTP proxy server. It must not benull.httpProxyPort- The port on which the HTTP proxy is listening for new connections.connectTimeoutMillis- The maximum length of time in milliseconds to wait for a connection to be established. A value that is less than or equal to zero indicates that no explicit timeout will be imposed.
-
HTTPProxySocketFactory
public HTTPProxySocketFactory(@NotNull String httpProxyHost, int httpProxyPort, int connectTimeoutMillis, @Nullable SSLSocketFactory sslSocketFactory) Creates a new instance of this HTTP socket factory with the provided settings. The resulting socket factory may provide support for either unencrypted LDAP communication (if the providedsslSocketFactoryvalue isnull) or encrypted LDAPS communication (if the providedsslSocketFactoryvalue is non-null).- Parameters:
httpProxyHost- The address of the HTTP proxy server. It must not benull.httpProxyPort- The port on which the HTTP proxy is listening for new connections.connectTimeoutMillis- The maximum length of time in milliseconds to wait for a connection to be established. A value that is less than or equal to zero indicates that no explicit timeout will be imposed.sslSocketFactory- An SSL socket factory that should be used if communication with the target LDAP server should be encrypted with TLS. It must benullif communication should not be encrypted, and it must not benullif communication should be encrypted with TLS.
-
-
Method Details
-
createSocket
Creates an unconnected socket that will use the configured proxy server for communication. Note that this method can only be used when communication through the proxy server will not be encrypted.- Overrides:
createSocketin classSocketFactory- Throws:
UnsupportedOperationException- If anSSLSocketFactoryhas been configured to secure communication with end servers.
-
createSocket
Creates a new socket that is connected to the specified system through the proxy server.- Specified by:
createSocketin classSocketFactory- Parameters:
host- The address of the server to which the socket should be established. It must not benull.port- The port of the server to which the socket should be established.- Throws:
IOException- If a problem is encountered while attempting to establish the connection.
-
createSocket
@NotNull public final Socket createSocket(@NotNull String host, int port, @Nullable InetAddress localHost, int localPort) throws IOException Creates a new socket that is connected to the specified system through the proxy server.- Specified by:
createSocketin classSocketFactory- Parameters:
host- The address of the server to which the socket should be established. It must not benull.port- The port of the server to which the socket should be established.localHost- The local address to which the socket should be bound. It may optionally benullit may be bound to any local address.localPort- The local port to which the socket should be bound.- Throws:
IOException- If a problem is encountered while attempting to establish the connection.
-
createSocket
Creates a new socket that is connected to the specified system through the proxy server.- Specified by:
createSocketin classSocketFactory- Parameters:
host- The address of the server to which the socket should be established. It must not benull.port- The port of the server to which the socket should be established.- Throws:
IOException- If a problem is encountered while attempting to establish the connection.
-
createSocket
@NotNull public final Socket createSocket(@NotNull InetAddress host, int port, @Nullable InetAddress localHost, int localPort) throws IOException Creates a new socket that is connected to the specified system through the proxy server.- Specified by:
createSocketin classSocketFactory- Parameters:
host- The address of the server to which the socket should be established. It must not benull.port- The port of the server to which the socket should be established.localHost- The local address to which the socket should be bound. It may optionally benullif it may be bound to any local address.localPort- The local port to which the socket should be bound.- Throws:
IOException- If a problem is encountered while attempting to establish the connection.
-