2009-07-27 8 views
14

Was ist der beste Weg, um Authentifizierung und Autorisierung für eine JSF-Webanwendung zu implementieren? Am liebsten würde ich immer noch Container-basierte Sicherheit verwenden, da ich EJBs aufrufen muss, die den Prinzipal benötigen.JSF-Authentifizierung und Autorisierung

Ich weiß, formularbasierte Authentifizierung ist ein großer Kampf mit JSF, aber kann ich vielleicht einen PhaseListener oder etwas Ähnliches zusammen mit programmatischer Anmeldung verwenden, um den Benutzer zu authentifizieren?

Alle anderen Methoden, die ich lieber betrachten sollte?

+0

Sie lassen uns, was Ihre Wahl war wissen können? –

+0

In Verbindung stehend: http://stackoverflow.com/questions/2206911/best-way-for-user-authentication-on-javaee-6-using-jsf-2-0/2207147#2207147 und http://stackoverflow.com/questions/6189536/programmatically-control-login-mit-servlet-3-0/6189810 # 6189810 – BalusC

Antwort

3

können Sie den Rahmen Spring Security verwenden, siehe Anleitung hier http://ocpsoft.com/java/acegi-spring-security-jsf-login-page/

+0

Danke für den Vorschlag. Kann Spring Security außerhalb des Spring Framework eingesetzt werden? Momentan habe ich JSF mit Facelets, und ich möchte eine zusätzliche Abhängigkeit von Spring vermeiden. – Zecrates

+0

Es hängt von mehreren Federmodulen ab - web, core und einigen anderen (zum Beispiel jdbc, wenn Sie Ihre Benutzerdaten in einer Datenbank speichern). Sie müssen Ihre Anwendung jedoch nicht auf dem Quellcode basieren, sondern nur als externe Bibliothek behandeln. –

+0

@David: Hi David, Möchtest du etwas darüber sagen, wann es gut ist, von einer Container-basierten Sicherheit zu Alternativen wie der Federsicherheit oder anderen zu wechseln? Weitere Informationen finden Sie hier: http: // stackoverflow.com/questions/7782720/when-to-move-from-container-managed-sicherheit-zu-alternativen-like-apache-shiro –

4

versuchen, für den Blog zu überprüfen using JAAS with JSF. Dies ist das Beispiel dafür, wie die JAAS mit JSF zur Authentifizierung und Autorisierung bereitzustellen.

Ich hoffe es hilft.

Tiger

+0

Danke für den Link. Ich bin mir jedoch einiger Dinge nicht sicher. Ich gehe davon aus, dass dies die formularbasierte Authentifizierung ersetzen wird, aber wie interagiert es mit meinem JAAS-Login-Modul (in Glassfish ein Realm). Ich verwende einen JDBC-Bereich. Ist kein PhaseListener dafür besser geeignet als ein ActionListener? – Zecrates

+0

@Tiger: Möchten Sie etwas darüber sagen, wann es gut ist, von einer Container-basierten Sicherheit zu Alternativen wie Shiro oder anderen zu wechseln? Weitere Informationen finden Sie hier: http://stackoverflow.com/questions/7782720/when-to-move-from-container-managed-security-to-alternatives-like-apache-shiro –

3

verwende ich JSF Seam und haben Seam die integrierte Authentifizierung und Autorisierung verwendet und finden es extrem einfach zu bedienen.

Zur Authentifizierung implementieren Sie einfach 1 Methode, public boolean login(String username, a String password) { ... } und gibt Boolean zurück. Dann können Sie Seiten als "Login-erforderlich" markieren und Naht kümmert sich um den Rest.

Für die Autorisierung gibt Seam Ihnen eine @Restrict Annotation, die Sie auf Ihre Controller oder Service-Methoden setzen können, und Seam kümmert sich um den Rest.

Erweiterte Autorisierung: Sie können auch mehr advanced authorization with Seam bearbeiten, wo Rollen dynamisch sind - z. In einem Bulletin Board sind Sie "Autor" einiger Posts, aber "Leser" oder anderer Posts, indem Sie einfach Ihre @Restrict-Annotation an eine Java-Methode delegieren.

Ich würde Sie ermutigen, einen Blick auf Seam zu werfen. Seam ist nur eine Ebene über JSF, also würden Sie technisch gesehen immer noch auf JSF laufen. Wenn Sie aus irgendeinem Grund Seam nicht verwenden können, können Sie sich vielleicht einige Ideen aus der Handhabung von Authorisation and Authentication in JSF durch Seam ausleihen.

2

Sie konnten die Servlet 3.0 HttpServletRequest API verwenden, wie sie in dieser Antwort auf eine JSF 2.0 Frage gezeigt:

JSF 2.0 Simple login page

+0

Dies ist nicht Teil von JSF 2. Dies ist Teil von Servlet 3.0. Das funktioniert nur, wenn JSF 1.x/2.x/was auch immer auf Tomcat 7, Glassfish 3, JBoss AS 6 usw. oder neuer ausgeführt wird. – BalusC