JSF Zugriffskontrolle

fsicher

Bekanntes Mitglied
Ich möchte für eine Anwendung zwei Frontends zur Verfügung stellen: Admin- und DefaultUser-Frontend. Nun, frage ich mich, wie ich es sicherstellen kann, dass der DefaultUser nicht auf die Seiten kommen kann, die nur für Admin gemeint sind. Ich habe Login schon implementiert und dazu auch zwei Rollen (admin bzw. default_user) definiert, aber der DefaultUser könnte den URL einer Admin-Seite eingeben, und dann hat er sie!

Ich weiss, dass man dies mit Tomcat regeln kann, indem der Zugriff auf bestimmte Verzeichnisse mit Hilfe von Rollen geregelt wird (Realm - container managed security). Wäre es möglich, dies auch auf der Applikationsebene zur regelen, und zwar in etwa so:
- bei jedem Zugriff auf eine Seite wird geprüft, ob die aktive Role (ein UserBean mit Rolle steht SessionScoped zur Verfügung) für die angeforderte Seite berechtigt ist oder nicht
- falls ja, wird der Zugriff gewährt
- fall nein, wird eine passende Seite (Access denied ...) angezeigt und der Zugriff damit abgeblockt.

Kann man so etwas mit JSFs mit einem überschaubaren Aufwand realisieren, oder ist das völlig sinnloss?

Danke.
 
M

Marcinek

Gast
ich würde das auf app level machen, und zwar genauso, wie du es beschrieben hast.
 

fsicher

Bekanntes Mitglied
Danke.

Mein Problem ist, dass ich im Moment nicht genau weiss, wie dies zu machen wäre. Im Moment schwebt mir so etwas vor:

Ich implementiere einen AccessRightManger als ManagedBean (SessionScoped), desen Methode checkAccessRight entweder null (zurück zur aktuellen Seite) oder "xxx/accessDenied.xhtml" zurück gibt.

Ich wüsste jetzt aber keine Komponente, die sich da eignen würde: müsste halt etwas "missbrauchen". Oder, einen Listener (PhasenListener - zur Zeit habe ich damit keine Erfahrung) benutzten? Oder, bin ich mit meiner Idee auf dem Holzweg? Gibt es da eine elegantere Lösung?
 

freez

Top Contributor
Und wenn es so gehen soll, dann würde ich ein servlet nehmen, auf alle nötigen Seiten/Ordner mappen, die Zugangsberechtigung brauchen und dort die Prüfung und Weiterleitung vornehmen.
 

mjustin

Aktives Mitglied
Bei Servlet 3.0 fähigen Containern (Tomcat 7) kann in EL die User Role zur Steuerung des Seiteninhalts benutzt werden:

Code:
rendered="#{facesContext.externalContext.isUserInRole('ADMIN')}"

Vorteil: es funktioniert auch auf Seiten die nicht SessionScope haben.

Ich habe es selber jedoch noch nicht eingesetzt, daher ist dieser Tipp ohne Gewähr :)

Bei Versionen vor 3.0 kann man ähnlich vorgehen

[XML]<ui:fragment rendered="#{user.isadmin}">
<ui:include src="/WEB-INF/adminpage.xhtml" />
</ui:fragment>
<ui:fragment rendered="#{not user.isadmin}">
<ui:include src="/WEB-INF/error.xhtml" />
</ui:fragment>[/XML]


Michael

Gefunden unter jsf 2.0 - Render JSF component based on user role - Stack Overflow
 
Zuletzt bearbeitet:

Oben