2009-07-27 11 views
14

Quelle est la meilleure façon d'implémenter l'authentification et l'autorisation pour une application Web JSF? De préférence, je voudrais toujours utiliser la sécurité basée sur le conteneur, car j'ai besoin d'appeler des EJB qui requièrent le principal. Je réalise que l'authentification basée sur les formulaires est un problème majeur avec JSF, mais est-ce que je peux peut-être utiliser un PhaseListener ou quelque chose de similaire avec l'ouverture de session programmatique pour authentifier l'utilisateur?Authentification et autorisation JSF

D'autres méthodes que je devrais plutôt jeter un oeil à?

+0

Pouvez-vous nous faire savoir quelle a été votre choix? –

+0

Connexe: http://stackoverflow.com/questions/2206911/best-way-for-user-authentication-on-javaee-6-using-jsf-2-0/2207147#2207147 et http://stackoverflow.com/questions/6189536/programatically-control-login-with-servlet-3-0/6189810 # 6189810 – BalusC

Répondre

3

Vous pouvez utiliser le cadre Spring Security, consultez les instructions ici http://ocpsoft.com/java/acegi-spring-security-jsf-login-page/

+0

Merci pour la suggestion. Spring Security peut-il être utilisé en dehors du Spring Framework? Actuellement, j'ai JSF simple avec Facelets, et je voudrais éviter une dépendance supplémentaire sur Spring. – Zecrates

+0

Cela dépend de plusieurs modules de ressort - Web, Core et plusieurs autres (par exemple jdbc si vous conservez vos données utilisateur dans une base de données). Cependant, vous n'avez pas besoin de baser votre application sur le printemps, il suffit de la traiter comme une bibliothèque externe. –

+0

@David: Salut David, Voudriez-vous dire quelque chose à propos de quand il est bon de passer de la sécurité basée sur des conteneurs à des alternatives comme la sécurité de printemps ou autres? Voir plus de question ciblée ici: http: // stackoverflow.com/questions/7782720/quand-à-déplacer-de-conteneur-géré-sécurité-à-alternatives-comme-apache-shiro –

4

Essayez de vérifier le blog pour using JAAS with JSF. Ceci est l'exemple de la façon de déployer les JAA avec JSF pour l'authentification et l'autorisation.

J'espère que ça aide.

Tiger

+0

Merci pour le lien. Je ne suis pas certain de certaines choses, cependant. Je suppose que cela va remplacer l'authentification basée sur les formulaires, mais comment interagit-elle avec mon module de connexion JAAS (dans Glassfish un domaine). J'utilise un domaine JDBC. De plus, un PhaseListener n'est-il pas un meilleur ajustement qu'un ActionListener? – Zecrates

+0

@Tiger: Voulez-vous dire quelque chose à propos de quand il est bon de passer de la sécurité basée sur des conteneurs à des alternatives comme shiro ou autres? Voir plus question ciblée ici: http: //stackoverflow.com/questions/7782720/when-to-move-from-container-managed-security-to-alternatives-like-apache-shiro –

3

J'utilise JSF Seam et ont utilisé intégré l'authentification et l'autorisation de Seam et de trouver qu'il est extrêmement facile à utiliser. Pour l'authentification, il suffit d'implémenter 1 méthode, public boolean login(String username, a String password) { ... } et renvoie booléen. Ensuite, vous pouvez marquer les pages comme "login-requis" et la couture s'occupe du reste.

Pour l'autorisation, Seam vous donne une annotation @Restrict que vous pouvez mettre sur vos méthodes de contrôleur ou de service et à nouveau, Seam s'occupe du reste.

Autorisation avancée: vous pouvez également gérer plus de advanced authorization with Seam où les rôles sont dynamiques (par ex. dans un tableau d'affichage, vous êtes "auteur" de certains messages, mais "lecteur" ou d'autres messages, en déléguant simplement votre annotation @Restrict à une méthode Java.

Je vous encourage à jeter un coup d'œil à Seam. Seam est juste une couche au-dessus de JSF donc techniquement vous seriez toujours en cours d'exécution sur JSF. Si, pour une raison ou une autre, vous ne pouvez pas utiliser Seam, vous pouvez peut-être emprunter quelques idées sur la façon dont Seam gère l'Autorisation et l'Authentification dans JSF.

2

Vous pouvez utiliser le Servlet 3.0 HttpServletRequest API comme indiqué dans cette réponse à une question JSF 2.0:

JSF 2.0 Simple login page

+0

Ceci ne fait pas partie de JSF 2. Cela fait partie de Servlet 3.0. Donc, cela ne fonctionne que lorsque vous utilisez JSF 1.x/2.x/any sur Tomcat 7, Glassfish 3, JBoss AS 6, etc ou plus récent. – BalusC