Top Description Inners Fields Constructors Methods
org.eclipse.jetty.server

public Class ForwardedRequestCustomizer

extends Object
implements Customizer
Class Inheritance
All Implemented Interfaces
org.eclipse.jetty.server.HttpConfiguration.Customizer
Imports
java.lang.invoke.MethodHandle, .MethodHandles, .MethodType, java.net.InetSocketAddress, .SocketAddress, java.util.Set, org.eclipse.jetty.http.BadMessageException, .HostPortHttpField, .HttpField, .HttpFields, .HttpHeader, .HttpScheme, .HttpURI, .QuotedCSVParser, org.eclipse.jetty.io.EndPoint, org.eclipse.jetty.server.internal.HttpConnection, org.eclipse.jetty.util.Attributes, .HostPort, .Index, .StringUtil, .TypeUtil, org.slf4j.Logger, .LoggerFactory

Customize Requests for Proxy Forwarding.

This customizer looks at at HTTP request for headers that indicate it has been forwarded by one or more proxies. Specifically handled are

If these headers are present, then the Request object is wrapped so that the proxy is not seen as the other end point of the connection on which the request came

Headers can also be defined so that forwarded SSL Session IDs and Cipher suites may be customised

The Authority (host and port) is updated on the Request object based on the host / port information in the following search order.

Request Authority Search Order
# Value Origin Host Port Protocol Notes
1 Forwarded Header "host=<host>" param (Required) "host=<host>:<port> param (Implied) "proto=<value>" param (Optional) From left-most relevant parameter (see rfc7239)
2 X-Forwarded-Host Header Required Implied n/a left-most value
3 X-Forwarded-Port Header n/a Required n/a left-most value (only if getForwardedPortAsAuthority() is true)
4 X-Forwarded-Server Header Required Optional n/a left-most value
5 X-Forwarded-Proto Header n/a Implied from value Required

left-most value becomes protocol.

6 X-Proxied-Https Header n/a Implied from value boolean

left-most value determines protocol and port.

See Also
Wikipedia: X-Forwarded-For, RFC 7239: Forwarded HTTP Extension

Nested and Inner Type Summary

Modifier and TypeClass and Description
private class
private static class
public static enum

Field Summary

Modifier and TypeField and Description
private HostPortHttpField
private String
private String
private String
private String
private String
private boolean
private String
private String
private String
private String
private final Index.Mutable<MethodHandle>
private boolean
private boolean
private static final Logger

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
public Request
public String
public String

Returns:

The header name holding a forwarded cipher suite (default Proxy-auth-cert)
getForwardedCipherSuiteHeader
()

public String

Returns:

the forwarded for header
getForwardedForHeader
()

Get the forwarded for header.

public String

Returns:

The header name for RFC forwarded (default Forwarded)
getForwardedHeader
()

public String
public String

Returns:

The header name holding a forwarded Https status indicator (on|off true|false) (default X-Proxied-Https)
getForwardedHttpsHeader
()

public boolean

Returns:

if true, the X-Forwarded-Port header applies to the authority, else it applies to the remote client address
getForwardedPortAsAuthority
()

public String
public String

Returns:

the forwardedProtoHeader (default X-Forwarded-Proto)
getForwardedProtoHeader
()

Get the forwardedProtoHeader.

public String

Returns:

the header name for forwarded server.
getForwardedServerHeader
()

Get the header name for forwarded server..

public String

Returns:

The header name holding a forwarded SSL Session ID (default Proxy-ssl-id)
getForwardedSslSessionIdHeader
()

public String
protected static String
getLeftMost(String headerValue)

public boolean

Returns:

true if the proxy address obtained via X-Forwarded-Server or RFC7239 "by" is used as the request authority. Default false
getProxyAsAuthority
()

protected static int
public boolean

Returns:

true if the presence of an SSL session or certificate header is sufficient to indicate a secure request (default is true)
isSslIsSecure
()

protected void
public void
setForcedHost(String
The value of the host header to force.
hostAndPort
)

Set a forced valued for the host header.

public void
setForwardedCipherSuiteHeader(String
The header name holding a forwarded cipher suite (default Proxy-auth-cert)
forwardedCipherSuiteHeader
)

public void
setForwardedForHeader(String
The header name for forwarded for (default X-Forwarded-For)
forwardedRemoteAddressHeader
)

public void
setForwardedHeader(String
The header name for RFC forwarded (default Forwarded)
forwardedHeader
)

public void
setForwardedHostHeader(String
The header name for forwarded hosts (default X-Forwarded-Host)
forwardedHostHeader
)

public void
setForwardedHttpsHeader(String
the header name holding a forwarded Https status indicator(default X-Proxied-Https)
forwardedHttpsHeader
)

Set the header name holding a forwarded Https status indicator(default X-Proxied-Https).

public void
setForwardedOnly(boolean
Configure to only support the RFC7239 Forwarded header and to not support any X-Forwarded- headers. This convenience method clears all the non RFC headers if passed true and sets them to the default values (if not already set) if passed false.
rfc7239only
)

public void
setForwardedPortAsAuthority(boolean
if true, the X-Forwarded-Port header applies to the authority, else it applies to the remote client address
forwardedPortAsAuthority
)

Set if the X-Forwarded-Port header will be used for Authority

public void
setForwardedPortHeader(String
The header name for forwarded hosts (default X-Forwarded-Port)
forwardedPortHeader
)

public void
setForwardedProtoHeader(String
the forwardedProtoHeader to set (default X-Forwarded-Proto)
forwardedProtoHeader
)

Set the forwardedProtoHeader.

public void
setForwardedServerHeader(String
The header name for forwarded server (default X-Forwarded-Server)
forwardedServerHeader
)

public void
setForwardedSslSessionIdHeader(String
The header name holding a forwarded SSL Session ID (default Proxy-ssl-id)
forwardedSslSessionIdHeader
)

public void
setHostHeader(String
The value of the host header to force.
hostHeader
)

Set a forced valued for the host header.

public void
setProxyAsAuthority(boolean
if true, use the proxy address obtained via X-Forwarded-Server or RFC7239 "by" as the request authority.
proxyAsAuthority
)

public void
setSslIsSecure(boolean
true if the presence of an SSL session or certificate header is sufficient to indicate a secure request (default is true)
sslIsSecure
)

public String
toString()

Overrides java.lang.Object.toString.

Returns a string representation of the object.
private void
updateForwardedHandle(MethodHandles.Lookup lookup, String headerName, String forwardedMethodName)

private void
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAllwaitwaitwait