request, response verändern

Conners

Erfahrenes Mitglied
Hallo
Ich hab ein Problem. Ich hab clientseitig ein request, welches ich parametermäßig nicht verändern kann. Die Übergabeparameter sind nicht passend zur ServerAPI. Und das response des Servers (text/xml) ist auch nicht passend zur ClientAPI. Also Übergabeparameter und xmltags müssen jeweils angepasst werden.

Deshalb wollte ich jetzt n kleines Programm schreiben, welches sowohl request, als auch response verändert.

Mein erstes Problem war, wie ich den request verändern kann und mit den neuen Parametern den Server requesten kann.

Dazu habe ich folgendes geschrieben:

Code:
<meta http-equiv="refresh" content="0;url=http://server-url?a=<%= request.getParameter("b") %>&c=<%= request.getParameter("d")%>

mir fiel keine bessere Lösung ein, als nen refresh mit veränderter url durchzuführen. aber egal. Daraufhin kriegt man ein XML-file als response

Mein Problem ist jetzt: Wie kann ich den response des Servers abfangen und zum Client weiterleiten?
Die Funktion zum verändern des XML files hab ich schon geschrieben. Also ich geh davon aus, dass ich das response als .xml auf meinem server zwischenspeicher, dort verändere und dann weiterleite.

Ich hoffe ihr versteht mein Problem

Schöne Grüße
Conners
 
Wie wärs mit einem ServletFilter, der die besagten Requests erkennt und dementsprechend umbaut? Auf Responseseite das gleiche?

Gruß
Ollie
 
Klingt interessant, hab mir grad mal ein paar Tutorials dazu durchgelesen. Scheint genau das zu sein, was ich brauche.

Ich hätte aber noch ein kleines Verständnisproblem dazu.

So wie ich das verstanden hab, werden solche Filter aufgerufen, während der Client sein Request losschickt, bzw. der Server sein response zurückschickt. Wie genau funktioniert das? Also wodran merkt das ServletFilter, dass der Client eine Anfrage startet, bzw. der Server ein response antwortet?
Ich kann das noch nicht bildlich zuordnen wie das funktioniert.

Ich muss übrigens das ServletFilter auf einen seperaten Server ablegen. Sowohl Client als auch Ausgangsserver sind für mich tabu. Ich könnte lediglich die requestURL vom Client ändern.

Ich hoffe du verstehst ungefähr mein Problem :)

Gruß
Conners
 
Großes Kino! "Ändere das Verhalten, aber fass nichts an!" ^^. Wer schlägt sowas vor?

Zum Thema: Der Filter liegt auf dem Server, d.h. er bekommt ihn erst, wenn der Request komplett auf dem Server ist. Normalerweise liegt "hinter" dem Filter ein Servlet. Zentrale Methode ist nun doFilter. Die must du implementieren und dann einfach die Filterchain weitertriggern
Java:
public class DeinServletFilter implements Filter {
  doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
  
    // vor dem Servlet (REQUEST manipulieren)

   filterChain.doFilter(request, response);

    // nach dem Servlet (RESPONSE manipulieren)
  }
}

Problematisch wird das ganze natürlich, wenn dein "Ziel" ein fremder Server ist. Da käme nur ein Redirect in Frage, der aber potentiell zu Authenfizierungsproblemen führt (Cookies gelten nur für eine bestimmte Domain). Ausserdem gibt es dann faktisch keinen Response mehr, da ja der Zielserver antwortet.

Wenn du mich fragst, wird sowas ein heilloses Gefrickel.

Gruß
Ollie
 
Ok, soweit hab ich das alles verstanden. Aber wenn das Filter ein Servlet ist, muss es ja in irgendeiner Form auch aufgerufen werden.

So wie ich dich verstehe werden solche Filter "immer" aufgerufen? Aber das müsste dann doch irgendwie klar gemacht werden oder? Ich persönlich kenn das bisher nur so, dass ich meine Servlets über die web.xml eine bestimmte /url zuordne und diese manuell aufrufen müsste. Gibt´s ne Möglichkeit Servlets bei jedem request, egal wie dieser aussieht, aufzurufen?

Oder bin ich grade total auf dem Holzweg? :rolleyes:

Gruß
Conners
 
Ein Filter ist ein Filter und kein Servlet ;). Sonst würde da ja "implements HttpServlet" dastehen. Du bindest die Filter ebenso wie Servlets in der web.xml an ein URL Pattern.

Gruß
Ollie
 
ok, habs hingekriegt. Thema Filter vom Prinzip verstanden :)

Du sagtest einzige Möglichkeit (bei fremden Server) wäre ein redirect. Mir ist nur der Befehl response.sendredirect("url") bekannt; meinst du den ? wenn ja, das würde doch nichts bringen, weil der Server, selbst wenn die requestanfrage richtig verändert würde, direkt an den Clienten antworten würde, also nicht über meinen Server. Oder?

Ich hab leider ("zur Zeit") noch keine Chance an den Zielserver heranzukommen. Ich hab nur die API zur Verfügung.
Falls sich das ergibt, werd ichs natürlich mit Filtern lösen, aber so wie es aussieht ist der Server für uns tabu.

Gruß Conners
 
Zuletzt bearbeitet:
Mit redirect krieg ich das nicht hin. Ich hab, soweit ich mich damit auskenne, alles mögliche probiert. Es funktioniert einfach nicht.
Das response kommt, egal wie ich das request auf meinem Server verändere, immer unverändert beim Client an. Ist ja auch irgendwie logisch wenn man mit redirect arbeitet.
(Falls jemand sich damit auskennt, kann man bei Wireshark zusammengehörende Anfragen/Antworten eines Streams abspeichern/anzeigen lassen?)

Bzw., gibts keine Möglichkeit nen 2. Stream aufzubauen der zwischen meinem und den Hauptserver arbeitet? Ich müsste doch irgendwie den serverresponse als temporöres xml-file auf meinem server abspeichern können, und nach dem Bearbeiten als response auf die Clientanfrage zurückschicken (der solange darauf warten müsste).

Bisher hab ich die ganze Zeit versucht alles mit einem Stream hinzukriegen, evtl. hab ich auch was übersehen, ich weiß es nicht, aber ich habs in keinster Weise hingekriegt.

Ich wäre für nen Hinweis wirklich dankbar.

EDIT: habs hingekriegt, danke für deine Hilfe
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück