//
//  ========================================================================
//  Copyright (c) 1995-2019 Mort Bay Consulting Pty. Ltd.
//  ------------------------------------------------------------------------
//  All rights reserved. This program and the accompanying materials
//  are made available under the terms of the Eclipse Public License v1.0
//  and Apache License v2.0 which accompanies this distribution.
//
//      The Eclipse Public License is available at
//      http://www.eclipse.org/legal/epl-v10.html
//
//      The Apache License v2.0 is available at
//      http://www.opensource.org/licenses/apache2.0.php
//
//  You may elect to redistribute this code under either of these licenses.
//  ========================================================================
//

package org.eclipse.jetty.server;

import java.util.Objects;
import javax.servlet.http.HttpServletRequest;

Customizes requests that lack the Host header (for example, HTTP 1.0 requests).

In case of HTTP 1.0 requests that lack the Host header, the application may issue a redirect, and the Location header is usually constructed from the Host header; if the Host header is missing, the server may query the connector for its IP address in order to construct the Location header, and thus leak to clients internal IP addresses.

This Customizer is configured with a serverName and optionally a serverPort. If the Host header is absent, the configured serverName will be set on the request so that ServletRequest.getServerName() will return that value, and likewise for serverPort and ServletRequest.getServerPort().

/** * Customizes requests that lack the {@code Host} header (for example, HTTP 1.0 requests). * <p> * In case of HTTP 1.0 requests that lack the {@code Host} header, the application may issue * a redirect, and the {@code Location} header is usually constructed from the {@code Host} * header; if the {@code Host} header is missing, the server may query the connector for its * IP address in order to construct the {@code Location} header, and thus leak to clients * internal IP addresses. * <p> * This {@link HttpConfiguration.Customizer} is configured with a {@code serverName} and * optionally a {@code serverPort}. * If the {@code Host} header is absent, the configured {@code serverName} will be set on * the request so that {@link HttpServletRequest#getServerName()} will return that value, * and likewise for {@code serverPort} and {@link HttpServletRequest#getServerPort()}. */
public class HostHeaderCustomizer implements HttpConfiguration.Customizer { private final String serverName; private final int serverPort;
Params:
  • serverName – the serverName to set on the request (the serverPort will not be set)
/** * @param serverName the {@code serverName} to set on the request (the {@code serverPort} will not be set) */
public HostHeaderCustomizer(String serverName) { this(serverName, 0); }
Params:
  • serverName – the serverName to set on the request
  • serverPort – the serverPort to set on the request
/** * @param serverName the {@code serverName} to set on the request * @param serverPort the {@code serverPort} to set on the request */
public HostHeaderCustomizer(String serverName, int serverPort) { this.serverName = Objects.requireNonNull(serverName); this.serverPort = serverPort; } @Override public void customize(Connector connector, HttpConfiguration channelConfig, Request request) { if (request.getHeader("Host") == null) request.setAuthority(serverName, serverPort); // TODO set the field as well? } }