Mit der Jetty-proxy im standalone-Jetty-Anwendung
Bin ich der Untersuchung mit Jetty 9 als proxy, über die eigenständige Steg, nicht eingebettete Jetty. Ich habe mir für die Hilfe in vielen Orten:
Meisten davon beziehen sich auf embedded Jetty:
Diese Frage ist entlang der gleichen Linien:
...aber die einzige Antwort ist ein link zu einer Seite, enthält einige Parameter für den proxy, aber keine Beispiele oder andere hilfreiche Hinweise.
Zur Frage...
Habe ich eine Erweiterung jettys ProxyServlet die überschreibt die rewriteURI()
Methode, um wirklich ändern Sie die Anfrage auf eine andere URL. Diese benutzerdefinierten proxy funktioniert, wenn Sie läuft Jetty eingebettet, aber wenn ich mit einem web.xml Datei und das jetty-maven-plugin, um einen Krieg zu implementieren, funktioniert Sie nicht mehr.
Wenn ich eine Anfrage habe, kann ich die Anwendung Debuggen und sehen, dass es in der rewriteURI()
Methode, es dann Anrufe jettys ProxyServlet ist service()
Methode, die ausgeführt wird, bis zur Fertigstellung, aber dann passiert nichts. Die Seite bleibt leer und irgendwann ProxyServlet ist onResponseFailure()
ist mit einer TimeoutException, "Total timeout elapsed". Dev-tools zeigt die Anforderung empfangen, einen 504 Gateway-Timeout.
Scheint es, als ob etwas fehlt, wie die Dinge verbunden sind, aber ich kann nicht sagen, was es sein könnte. Jegliche Hilfe würde sehr geschätzt werden. Ich habe web.xml
- und custom-proxy (ProxyServletExtension
) unten.
web.xml
<servlet>
<servlet-name>proxy</servlet-name>
<servlet-class>org.example.ProxyServletExtension</servlet-class>
<init-param>
<param-name>maxThreads</param-name>
<param-value>1</param-value>
</init-param>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>proxy</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
ProxyServletExtension.java
...
import org.eclipse.jetty.proxy.ProxyServlet;
...
public class ProxyServletExtension extends ProxyServlet {
@Override
protected URI rewriteURI(HttpServletRequest request) {
//Forward all requests to another port on this machine
String uri = "http://localhost:8060";
//Take the current path and append it to the new url
String path = request.getRequestURI();
uri += path;
//Add query params
String query = request.getQueryString();
if (query != null && query.length() > 0) {
uri += "?" + query;
}
return URI.create(uri).normalize();
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich die Hinweise, die ich brauchte, um dieses Problem zu lösen mit jetty transparenten proxy gibt immer 403 forbidden. Die Frage nicht genau, beziehen sich auf meine Frage, aber das code-snippet bereitgestellt, zeigte mir, was ich brauchte, in der
<servlet>
imweb.xml
.Aktualisiert web.xml
Erforderlichen änderungen
<servlet-class>
zuProxyServletExtension$Transparent
, zuvor war ich nicht mit einem trasparent proxy.<init-param>
vonproxyTo
mit der Adresse, die Sie möchten, um als proxy für die Anfragen. Dies bedeutet auch, dass dieProxyServletExtension.java
Klasse höher (in der Frage) ist völlig unnötig.Außerdem ist es erwähnenswert, dass es eine
prefix
<init-param>
sowie, die verwendet werden können, um den Teil zu entfernen, der die eingehende Anforderung vor der Proxyfunktion für die weitergeleitete Anfrage.