2016-05-22 18 views
0

Ich möchte die Anforderung an einen anderen Server umleiten, der die Anforderung verarbeitet und Geschäftslogik ausführt. Ich habe es mit ProxyServlet versucht, aber es funktioniert nicht.Jetty ProxyServlet leitet die Anforderung nicht um

Hier ist meine Implementierung von Haupt-Server, der alle Anfragen bekommt: läuft auf localhost: 8081

Server server = new Server(8081); 

    // 2. Creaing the WebAppContext for the created content 
    WebAppContext ctx = new WebAppContext(); 
    ctx.setResourceBase("src/main/webapp"); 
    ctx.setContextPath("/jetty-jsp-example"); 

    ServletHolder jerseyServlet = ctx.addServlet(ProxyServlet.class,"/*"); 
    jerseyServlet.setInitOrder(0); 

    jerseyServlet.setInitParameter("maxThreads", "1"); 
    jerseyServlet.setInitParameter("proxyTo", "localhost:8080"); 

    ctx.setAttribute("o:Prg.eclipse.jetty.server.webapp.ContainerIncludeJarPattern",".*/[^/]*jstl.*\\.jar$"); 

    org.eclipse.jetty.webapp.Configuration.ClassList classlist = org.eclipse.jetty.webapp.Configuration.ClassList.setServerDefault(server); 
    classlist.addAfter("org.eclipse.jetty.webapp.FragmentConfiguration", "org.eclipse.jetty.plus.webapp.EnvConfiguration", "org.eclipse.jetty.plus.webapp.PlusConfiguration"); 
    classlist.addBefore("org.eclipse.jetty.webapp.JettyWebXmlConfiguration", "org.eclipse.jetty.annotations.AnnotationConfiguration"); 
    server.setHandler(ctx); 
    server.start(); 
    server.join(); 

ich auf Port Anfrage ein Server mit weiterleiten möchten 8080. Mein Ziel Service URL-Pfad ist: localhost: 8080/jetty-jsp-Beispiel/sv/Endpunkt.

ich importiert haben Anlegestelle Proxy wie folgt

<dependency> 
<groupId>org.eclipse.jetty</groupId> 
<artifactId>jetty-proxy</artifactId> 
<version>9.3.8.v20160314</version> 

Außerdem las ich, dass unsere eigene Proxy-Servlet erforderlich werden sollte, die proxyservlet Klasse und überschreiben die rewriteURL() method.But, wenn ich zu verlängern versucht, dass es mir Kompilierfehler gab.
Wer lässt mich wie kann ich das bitte lösen. Ich benutze Anlegesteg 9.3

Antwort

2

Heh, ich fragte mich, wie man das neulich arbeiten auch bekommen. Ich hatte den Subtyp BalancerServlet mit den folgenden init-Parameter zu verwenden:

// give your servlet a name 
jerseyServlet.setName("proxy"); 
// parameter is 'balancerMember.NAME.proxyTo' 
jerseyServlet.setInitParameter("balancerMember.proxy.proxyTo", "http://yourdownstreamserver.com/"); 

Docs etwas spärlich um Konfiguration sind; Ich musste am Ende die source code betrachten. Beachten Sie außerdem, dass der Jetty-Proxy die Weiterleitung an Downstream-Dienste über SSL nicht unterstützt.

+0

@ Débora das ist richtig, sorry ich habe diesen Teil weggelassen! Vielleicht habe ich nicht genug in den Code gegraben, aber ich bin mir nicht sicher, warum die Basis 'ProxyServlet' nicht abstrakt ist, es scheint nicht viel allein zu tun ... –

+0

@ Débora Ich bin mir ziemlich sicher, ich die exakt gleiche Version von 'Jetty-Proxy' in mein Projekt importiert; hast du es importiert? Ich bin mir nicht sicher, wie es zur Laufzeit funktioniert, wenn die Klasse nicht gefunden wurde. –

+0

@ Débora yup, das klingt gut, denke, das ist der neueste Stall und ich benutze das auch. Ich habe die "Jetty-Server", "Jetty-Servlet" und "Jetty-Proxy" Abhängigkeiten in meinem POM und ich benutze 'ServletContextHandler' um Servlets hinzuzufügen. Sehen Sie sich die Dokumentation zum Einbetten von Jetty mit Servlets an –

Verwandte Themen