Zugriff auf Session direkt auf JSF-Seite

Raphalon

Aktives Mitglied
Hallo,

welche Lösungsmöglichkeit(en) gibt es für folgendes Problem: ein User hat sich eingeloggt (die Session ist also bereits erstellt). Nun soll auf jeder danach aufrufbaren JSF - Seite geprüft werden, ob ein User eingeloggt ist. Dies soll z.B. nicht erst nach Absenden des Formulars in einer Bean über "Security Roles" mittels @RolesAllowed("list-of-roles") geprüft werden, sondern die Seite selbst soll gar nicht erst angezeigt werden, wenn der User nicht eingeloggt ist.

In einer jsp-Seite könnte dies z.B. mittels folgendem Konstrukt erfolgen:
HTML:
<c:if test="${empty sessionScope.user}"> 
    <c:redirect url="/index.jsp" /> 
</c:if>
Wie würde "man" das in JSF machen?

Gruß,

Raphalon
 
OK, danke. Alternativ kann man auch SystemEvents verwenden. Man bindet sie in die jsf - Seite(n) ein z.B. mit
[XML]<f:view>
<f:event type="preRenderView" listener="#{userBean.verifyLogin}"/>
...
</f:view>[/XML]
In der UserBean navigiert man dann bei fehlendem Login entsprechend:

Java:
public void verifyLogin(ComponentSystemEvent event) {
	if (!loggedIn) {
		FacesContext context = FacesContext.getCurrentInstance();
		ConfigurableNavigationHandler handler = (ConfigurableNavigationHandler) context.getApplication().getNavigationHandler();
		handler.performNavigation("login");
	}
}
Wenn jedoch einmal ein Login erfolgt ist und eine Seite im Cache des ClientBrowsers ist, und man sendet nach einem Logout erneut z.B. Formulardaten an den Server, dann werden diese auch bearbeitet. Grund: der Login wie oben wird nur dann überprüft, wenn die jsf-Seite vom Server geladen wird. Daher müßte man zusätzlich die Beans absichern, die das Forumlar verarbeiten.
 

Zurück
Oben