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 javax.net.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
SSLSocketFactory
instance 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. }
-
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
-
-
Constructor Summary
Constructors Constructor Description HTTPProxySocketFactory(java.lang.String httpProxyHost, int httpProxyPort, int connectTimeoutMillis)
Creates a new instance of this HTTP socket factory with the provided settings.HTTPProxySocketFactory(java.lang.String httpProxyHost, int httpProxyPort, int connectTimeoutMillis, javax.net.ssl.SSLSocketFactory sslSocketFactory)
Creates a new instance of this HTTP socket factory with the provided settings.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.net.Socket
createSocket()
Creates an unconnected socket that will use the configured proxy server for communication.java.net.Socket
createSocket(java.lang.String host, int port)
Creates a new socket that is connected to the specified system through the proxy server.java.net.Socket
createSocket(java.lang.String host, int port, java.net.InetAddress localHost, int localPort)
Creates a new socket that is connected to the specified system through the proxy server.java.net.Socket
createSocket(java.net.InetAddress host, int port)
Creates a new socket that is connected to the specified system through the proxy server.java.net.Socket
createSocket(java.net.InetAddress host, int port, java.net.InetAddress localHost, int localPort)
Creates a new socket that is connected to the specified system through the proxy server.
-
-
-
Constructor Detail
-
HTTPProxySocketFactory
public HTTPProxySocketFactory(@NotNull java.lang.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 java.lang.String httpProxyHost, int httpProxyPort, int connectTimeoutMillis, @Nullable javax.net.ssl.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 providedsslSocketFactory
value isnull
) or encrypted LDAPS communication (if the providedsslSocketFactory
value 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 benull
if communication should not be encrypted, and it must not benull
if communication should be encrypted with TLS.
-
-
Method Detail
-
createSocket
@NotNull public final java.net.Socket createSocket() throws java.lang.UnsupportedOperationException
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:
createSocket
in classjavax.net.SocketFactory
- Throws:
java.lang.UnsupportedOperationException
- If anSSLSocketFactory
has been configured to secure communication with end servers.
-
createSocket
@NotNull public final java.net.Socket createSocket(@NotNull java.lang.String host, int port) throws java.io.IOException
Creates a new socket that is connected to the specified system through the proxy server.- Specified by:
createSocket
in classjavax.net.SocketFactory
- 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:
java.io.IOException
- If a problem is encountered while attempting to establish the connection.
-
createSocket
@NotNull public final java.net.Socket createSocket(@NotNull java.lang.String host, int port, @Nullable java.net.InetAddress localHost, int localPort) throws java.io.IOException
Creates a new socket that is connected to the specified system through the proxy server.- Specified by:
createSocket
in classjavax.net.SocketFactory
- 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 benull
it may be bound to any local address.localPort
- The local port to which the socket should be bound.- Throws:
java.io.IOException
- If a problem is encountered while attempting to establish the connection.
-
createSocket
@NotNull public final java.net.Socket createSocket(@NotNull java.net.InetAddress host, int port) throws java.io.IOException
Creates a new socket that is connected to the specified system through the proxy server.- Specified by:
createSocket
in classjavax.net.SocketFactory
- 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:
java.io.IOException
- If a problem is encountered while attempting to establish the connection.
-
createSocket
@NotNull public final java.net.Socket createSocket(@NotNull java.net.InetAddress host, int port, @Nullable java.net.InetAddress localHost, int localPort) throws java.io.IOException
Creates a new socket that is connected to the specified system through the proxy server.- Specified by:
createSocket
in classjavax.net.SocketFactory
- 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 benull
if it may be bound to any local address.localPort
- The local port to which the socket should be bound.- Throws:
java.io.IOException
- If a problem is encountered while attempting to establish the connection.
-
-