2010-02-09 6 views
11

Je souhaite gérer l'utilisateur et les rôles dans une application dédiée. Par exemple, un utilisateur de cette application ("customerX boss") peut créer un nouveau rôle "customerX employee". Si un employé accède au serveur d'application Java EE (GlassFish 3), il doit obtenir le rôle "customerX employee".rôles dynamiques sur un serveur Java EE

Cela semble simple, mais il n'est pas pris en charge par Java EE, car les groupes sont mappés aux rôles au démarrage et les rôles au sein de l'application sont statiques. Quelle est la meilleure façon de gérer les rôles utilisateur lors de l'exécution dans un environnement Java EE (6)?

Quelle est la meilleure façon de gérer les rôles utilisateur lors de l'exécution?

+2

J'ai créé https://java.net/jira/browse/JAVAEE_SPEC-20 à l'appui (entre autres) de ce cas d'utilisation. Si vous ou quelqu'un d'autre est encore dérangé par le manque de dynamisme dans les rôles Java EE, s'il vous plaît voter pour ou laisser un commentaire. –

Répondre

11

La sécurité déclarative de Java EE n'est en effet pas adaptée à de telles exigences. Le problème de la sécurité peut être divisé en deux:

  • authentification
  • autorisation

j'avais besoin similaire une fois. Nous avons utilisé l'authentification intégrée pour avoir l'ensemble principal et nous nous sommes appuyés ensuite sur les mécanismes de connexion Java EE par défaut. Mais nous avons fini par gérer la partie d'autorisation manuellement au niveau applicatif.

En effet, même les rôles qui seront chargés et associés au principal (isUserInRole pour le web et isCallerInRole pour l'EJB) doivent être spécifiées dans web.xml ou ejb.xml qui ne fournit pas assez de flexibilité. Nous avons ensuite dû charger les rôles manuellement (selon le principal) à partir de LDAP ou ActiveDirectory. Nous avons ensuite utilisé les intercepteurs EJB3 et le filtre Servlet pour effectuer les contrôles de sécurité nous-mêmes.

Cependant, je suggère fortement de rester sur un contrôle d'accès basé sur les rôles (RBAC) et de ne pas implémenter quelque chose de plus sophistiqué. Il y a plusieurs cadres qui peuvent aider à traiter le RBAC fait maison.

Nous avons également regardé JSecurity et Acegi Security et ils semblaient intéressants.

+0

Merci pour votre réponse, en particulier pour l'indication que même les rôles dynamiquement définis doivent être déclarés statiquement dans web.xml ou ejb.xml! Cela aurait été le prochain piège pour moi. Je vais vérifier JSecurity et Spring Security (le successeur d'Acegi) http://static.springsource.org/spring-security/site/index.html. – deamon

+1

JSecurity est maintenant appelé "Shiro". http://cwiki.apache.org/confluence/display/SHIRO/Index – deamon

+0

Oui, les rôles déclarés avec '' ou '@ DeclaredRoles' sont en fait des noms symboliques qui doivent être mappés au rôle dans le répertoire externe (par exemple LDAP) en utilisant ''. Si le mappage est 1-à-1, Glassfish propose une option "Mappage par défaut du rôle sur le rôle", mais ce n'est que la moitié de la solution et vous devez toujours lister le rôle quelque part. – ewernli