Actuellement, je travaille sur un projet web utilisant JSF 2.0, Tomcat 7 et MongoDB. J'ai une grande question de savoir comment gérer la gestion de session et l'authentification/autorisation avec les utilisateurs dans une base de données.
La structure que je souhaite est la suivante: seuls les utilisateurs connectés peuvent créer des événements et tout le monde peut voir les événements créés.
create.xhtml
-> uniquement pour les utilisateurs connectés.events.xhtml
-> public pour tout le monde.La structure de base que je prévois est:
create.xhtml
)login.xhtml
@SessionScoped
entre en jeu)La question est:
@SessionScoped
annotation? Dans Create.Java
ou LoginManager.Java
?Il existe plusieurs options. Le choix dépend entièrement de vous. Il suffit de peser objectivement les avantages et les inconvénients concrets qui correspondent à votre propre situation.
Déclarez simplement un <security-constraint>
Dans web.xml
Qui fait référence à un domaine de sécurité configuré dans servletcontainer. Vous pouvez pour votre webapp spécifier des modèles d'URL dont la connexion et/ou les rôles doivent être vérifiés, par exemple /secured/*
, /app/*
, /private/*
, Etc.
Avant Java EE 8, vous devez malheureusement encore configurer une sécurité réelle d'une manière spécifique au servletcontainer. Elle est généralement décrite dans la documentation spécifique au servletconainer. Dans le cas de Tomcat 8, c'est le Realm HOW-TO Par exemple, un domaine basé sur une base de données basé sur des tables d'utilisateurs/rôles est décrit dans la section "JDBCRealm".
Depuis Java EE 8, il y aura enfin une API standard basée sur JSR-375 .
Cela permet un contrôle beaucoup plus fin, mais vous devrez écrire tout le code vous-même et vous devriez vraiment savoir/comprendre comment mettre en œuvre un tel filtre pour éviter les failles de sécurité potentielles. Côté JSF, vous pouvez par exemple simplement mettre l'utilisateur connecté en tant qu'attribut de session par sessionMap.put("user", user)
et vérifier dans le filtre si session.getAttribute("user")
n'est pas null
.
Par exemple, Apache Shiro , Spring Security , etc. Cela offre généralement des options de configuration plus fines que l'authentification gérée par conteneur standard et vous n'avez pas besoin d'écrire de code pour vous-même, attendez-vous à la page de connexion et à une configuration (XML) bien sûr.