404 mit response.sendRedirect

8

Ich benutze Spring Security Login-Mechanismus für meine Anwendung und alles getestet. Die Dinge waren in Ordnung. Ich habe den folgenden Anwendungsfall

  1. Wenn der Kunde nicht angemeldet ist, leitet die Anwendung den Kunden zur Anmeldeseite weiter.
  2. Bei erfolgreicher Anmeldung leitet die Anwendung den Kunden zurück zu derselben Seite, von der aus sie zur Anmeldeseite weitergeleitet wurden

Dies ist der Java-Code, der zum Umleiten des Benutzers an seinen ursprünglichen Ort verwendet wird.

%Vor%

RedirectionStrategy wird hier verwendet DefaultRedirectStrategy , die Dinge haben gut funktioniert. Anwendung wird jetzt auf dem Pre Production-Server bereitgestellt und jetzt scheint dies nicht zu funktionieren und ich bekomme 404 Fehler.

Wenn der Kunde zur Startseite weitergeleitet wird, kommt targetUrl als "/" heraus, ich habe einen Spring-Controller, der mit dieser Zuordnung benannt ist

%Vor%

Der aktuelle Pre-Prod-Code meiner Anwendung lautet prepd-www.mysite.com . Wenn also sendredirect zur Aktion kommt, wird die URL der Webseite in prepd-www.mysite.com/prepd-www.mysite.com

geändert

Ich bin mir nicht sicher, was dieses Problem verursacht. ist es wegen der Proxy-Server-Einstellungen? Kann mir jemand die mögliche Ursache dieses Problems vorschlagen?

Ich habe es bereits auf allen lokalen Maschinen und gut auf unserer QA versucht, aber alles funktioniert perfekt.

Die aktuelle Einstellung für die Umgebung, in der dies geschieht, ist

  1. Wir haben 4 App-Server
  2. Wir haben einen Load-Balancer, der Traffic auf einen der App-Server umleitet.
Umesh Awasthi 21.11.2014, 08:53
quelle

3 Antworten

1

Nur eine wilde Vermutung, da Sie weder die Reverse-Proxy-Konfiguration, noch die genaue URL in pre-prod und in developement angeben konnten.

Sie sagen, dass Sie DefaultRedirectStrategy von Spring security verwenden. Diese Strategie hat eine Option (contextRelative), die den ServletContext-Pfad der URL voranstellt. Wenn Sie in Ihrem Entwicklungssystem den Wurzelkontext verwendet haben, dh wenn Sie auf die Homepage z. B. zugegriffen haben: http://localhost:8080/ Der serlet-Kontext war leer.

Aber wenn jetzt in preprod, der Servlet-Kontext ist nicht mehr root, sondern sagen /myApp einmal von Apache Reverse-Proxy übersetzt , wenn Sie umleiten erhalten Sie eine URL von /myApp/myApp , die sein könnte übersetzt zurück zu dem, was Sie gegeben haben.

Sie könnten versuchen zu kontrollieren, ob Sie contextRelative als true in DefaultRedirectStrategy haben und wenn ja, wenn Sie false setzen können und auch kontrollieren, ob Sie auf absolute oder relative URLs umleiten.

    
Serge Ballesta 11.01.2015 18:43
quelle
1

Wenn Sie Apache im Vordergrund verwenden, überprüfen Sie die Rewrite-Regel und leiten Sie die Regeln der Apache-Konfiguration um. Der beste Weg wäre, SSH-Tunnel direkt auf den Anwendungsserver (durch Überspringen von Apache) und testen. Wenn es funktioniert, bedeutet das, dass Ihre Anwendungskonfiguration in Ordnung ist und in Apache behoben werden muss.

    
Chirag Shah 15.01.2015 19:18
quelle
1

Benutzt du in der Vorproduktion Tomcat oder einen anderen Anwendungsserver ?, normalerweise, wenn dein Krieg foo und dein Commit zu Tomcat aufruft, ist der Pfad für diesen Krieg

%Vor%

Wenn Sie also Servlet verwenden, müssen Sie in Ihrer web.xml angeben, dass der Hauptpfad foo / *

lautet     
paul 19.12.2014 08:09
quelle