Die Autorisierungsumleitung beim Ablauf der Sitzung funktioniert nicht beim Senden eines JSF-Formulars, die Seite bleibt unverändert

8

Ich benutze JSF2. Ich habe ein benutzerdefiniertes Faces-Servlet wie folgt implementiert:

%Vor%

Ich mache einige Berechtigungsprüfungen und sende eine Weiterleitung, wenn der Benutzer nicht angemeldet ist:

%Vor%

Dies funktioniert, wenn der Benutzer versucht, zu einer anderen Seite zu navigieren. Dies funktioniert jedoch nicht, wenn ein JSF-Formular über eine JSF-Befehlsverknüpfung / -Schaltfläche gesendet wird. Die Zeile sendRedirect() line wird gefunden und ausgeführt, es wurde keine Ausnahme ausgelöst, aber der Benutzer bleibt auf derselben Seite. Grundsätzlich gibt es keine visuelle Veränderung.

Warum funktioniert das bei der Seitennavigation, aber nicht beim Senden von Formularen?

    
Danijel 29.01.2013, 10:05
quelle

2 Antworten

17

Ihr konkretes Problem wird höchstwahrscheinlich dadurch verursacht, dass Ihre JSF-Befehlsverknüpfung / -Schaltfläche tatsächlich eine Ajax-Anfrage sendet, die wiederum eine spezielle XML-Antwort erwartet. Wenn Sie eine Weiterleitung als Antwort auf eine Ajax-Anfrage senden, wird die Ajax-Anfrage einfach erneut an diese URL gesendet. Dies schlägt wiederum ohne Feedback fehl, da die Weiterleitungs-URL eine ganze HTML-Seite anstelle einer speziellen XML-Antwort zurückgibt. Sie sollten tatsächlich eine spezielle XML-Antwort zurückgeben, in der die JSF-Ajax-Engine angewiesen wurde, die aktuelle window.location zu ändern.

Aber Sie haben tatsächlich größere Probleme: Verwenden Sie das falsche Werkzeug für den Job. Sie sollten einen Servlet-Filter für den Job verwenden, nicht ein selbst erstelltes Servlet und mit Sicherheit keinen, der die% co_de ersetzt % wer ist verantwortlich für alle JSF-Arbeiten.

Angenommen, Sie führen die Anmeldung in einer beanspruchten JSF-Backing-Bean für die Anfrage / Ansicht wie folgt aus (wenn Sie eine containerverwaltete Authentifizierung verwenden, siehe auch das zweite Beispiel von Durchführen der Benutzerauthentifizierung in Java EE / JSF mit j_security_check ):

%Vor%

Dann sollte dieses Kickoff-Beispiel eines Filters tun:

%Vor%

Siehe auch:

BalusC 29.01.2013, 11:39
quelle
0

FacesContext.getCurrentInstance (). getExternalContext (). redirect ("newpage.xhtml"); Probieren Sie dies .... anstelle von res.sendredirect (cpath).

    
Tarun Gupta 29.01.2013 10:11
quelle