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?
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%FacesContext.getCurrentInstance (). getExternalContext (). redirect ("newpage.xhtml"); Probieren Sie dies .... anstelle von res.sendredirect (cpath).
Tags und Links java redirect authorization jsf jsf-2