Wie implementieren Sie ein login-filter in JSF?
Ich würde gerne blockieren, den Zugang von einer Seite, selbst wenn der Benutzer kennt die url von einigen Seiten.
Zum Beispiel /localhost:8080/user/home.xhtml
(müssen sich zunächst anmelden), wenn nicht angemeldet, dann redirect zu /index.xhtml
.
Wie dies in JSF ? Ich habe gelesen im Google, dass benötigt einen filter, aber ich weiß nicht, wie das zu tun.
InformationsquelleAutor Valter Silva | 2011-12-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie implementieren müssen, um die
javax.- servlet.- Filter
Klasse, führen die gewünschte Arbeit indoFilter()
- Methode und ordnen Sie Sie auf ein URL-Muster für die Seiten beschränkt,/user/*
vielleicht? Innerhalb derdoFilter()
Sie sollten überprüfen, die Anwesenheit der angemeldeten Benutzer in der Sitzung irgendwie. Weiter müssen Sie auch nehmen, JSF, ajax-und Ressourcen-Anforderungen zu berücksichtigen. JSF-ajax-Anforderungen erfordern eine spezielle XML-Antwort lassen Sie JavaScript eine Umleitung durchzuführen. JSF-Ressource-Anforderungen müssen übersprungen werden, ansonsten wird Ihr login-Seite keine CSS/JS/Bilder mehr.Vorausgesetzt, Sie haben eine
/login.xhtml
Seite, welche den angemeldeten Benutzer in eine JSF managed bean überexternalContext.getSessionMap().put("user", user)
, dann konnte man es übersession.getAttribute("user")
der üblichen Weise wie folgt:Darüber hinaus werden die filter auch deaktiviert, browser cache auf sicheren Seite, also die zurück-Schaltfläche Ihres Browsers wird nicht zeigen, bis Sie nicht mehr.
In den Fall, Sie geschehen, JSF verwenden utility library OmniFaces, obige code könnte reduziert werden, wie unten:
Siehe auch:
Du bist herzlich willkommen.
anstelle der Verwendung von getAttribute("auth"), könntest du mit @ManagedProperty(value="#{auth}") private Auth auth;
Falsch.
@ManagedProperty
arbeitet in einem@ManagedBean
nur, nicht in eine@WebFilter
.Wenn Sie mit den CDI ' s
@Named
statt, dann können Sie@Inject
zu injizieren und es in beiden einen@ManagedBean
(oder nur ein weiterer@Named
) und eine@WebFilter
.InformationsquelleAutor BalusC
Zwar ist es natürlich legitim, um eine einfache Servlet-filter, gibt es alternativen wie
InformationsquelleAutor Werner Keil