/** * Copyright (c) 2014-2017 by the respective copyright holders. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.smarthome.ui.internal.proxy; import java.util.Objects; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.Request; import org.eclipse.jetty.util.ssl.SslContextFactory; /** * This version of the proxy servlet uses asynchronous I/O and request processing, and is based on Jetty's proxy * servlets. It depends on Servlet API 3.0 or later. * * @author John Cocula - new version that uses Jetty proxy classes */ public class AsyncProxyServlet extends org.eclipse.jetty.proxy.AsyncProxyServlet { private static final long serialVersionUID = -4716754591953017795L; private final ProxyServletService service; AsyncProxyServlet(ProxyServletService service) { super(); this.service = service; } @Override public String getServletInfo() { return "Proxy (async)"; } /** * {@inheritDoc} * * Override <code>newHttpClient</code> so we can proxy to HTTPS URIs. */ @Override protected HttpClient newHttpClient() { return new HttpClient(new SslContextFactory()); } /** * {@inheritDoc} * * Add Basic Authentication header to request if user and password are specified in URI. * * After Jetty is upgraded past 9.2.9, change to <code>copyRequestHeaders</code> to avoid deprecation warning. */ @SuppressWarnings("deprecation") @Override protected void copyHeaders(HttpServletRequest clientRequest, Request proxyRequest) { super.copyHeaders(clientRequest, proxyRequest); service.maybeAppendAuthHeader(service.uriFromRequest(clientRequest), proxyRequest); } /** * {@inheritDoc} */ @Override protected String rewriteTarget(HttpServletRequest request) { return Objects.toString(service.uriFromRequest(request), null); } /** * {@inheritDoc} */ @Override protected void onProxyRewriteFailed(HttpServletRequest request, HttpServletResponse response) { service.sendError(request, response); } }