IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sécurité Java Discussion :

[Securite J2EE] Gestion login


Sujet :

Sécurité Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 34
    Par défaut [Securite J2EE] Gestion login
    Bonjour à tous!!

    Voila je vous explique mon petit problème...
    Je développe une appli J2EE sous JBoss 4.0.2 avec Struts et Hibernate. La question qui se pose maintenant est la gestion des logins des utilisateurs et l'acces reserve à certaines pages jsp du site.

    Dans notre application nous avons 3 rôles: Client, Agent et Admin

    Je pensais utiliser j_constraint_check pour la gestion de l'authentification c'est à dire juste définir dans mon fichier web.xml les contraintes de sécurité mais est-il possible dans ce fichier web.xml de spécifier en fonction des roles quels pages sont accessibles?? Et je suis obligé d'inclure dans tomcat les roles à utiliser (dans le fichier roles.properties je crois...)...

    Est_ce une bonne gestion, parce que je pensais ensuite au début de chaque page jsp vérifier ces contraintes et rediriger avec struts sur une page de login...

    Voila merci de me répondre parce que cette partie me semble encore un peu floue...

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    salut,

    ya d'autres moyen pour sécuriser ton application :

    JAAS:http://java.sun.com/products/jaas/re...ocs/index.html

    JGuard : http://sourceforge.net/projects/jguard/

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 34
    Par défaut
    Ouais j'avais vu ce jGuard mais je me demande si c facile à utiliser....

    Est-ce qu'avec jGuard je peux facilement gérer mes différents roles et vérifier sur chaque page jsp que l'utilisateur est bien identifie et qu'il a bien le droit d'acceder à la page??

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 34
    Par défaut
    jGuard à l'air bien sympa....

    Je veux juste etre sur de pouvoir arriver sur une page de login, que l'utilisateur saisisse ses données, je consulte ses données dans la base de données pour récupérer le role de cet utilisateur et apres comment je fais pour affecter son role?? Je veux dire à quoi il faut que j'accede dans mes pages jsp pour connaitre le role de l'utilisateur que je viens de récupérer dans la BdD?...

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 136
    Par défaut
    Bonjour,
    je fais partie de l'équipe jGuard, et donc vais essayer de répondre à tes questions.
    ;-p
    jGuard permet de gérer le mécanisme permettant de t'authentifier en fonctions des données remplies dans le formulaire de login en les comparant avec des données persistées en base. il affecte automatiquement à ton utilisateur les rôles associés.
    concernant la récupération des rôles dans du code ou une jsp, le user(l'objet Subject) est stocké en session.
    tu le récupère ainsi:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Subject subj =  (Subject)request.getSession().getAttribute(HttpConstants.SUBJECT_ID);
    pour récupérer les rôles(appelés principals), tu le fais ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set principals = subj.getPrincipals();
    si tu souhaites dans ta jsp afficher des bouts de pages en fonction d'un rôle précis, ou d'un accès à une permission précise, tu peux le faire via la taglib fournie.
    par exemple, si tu souhaites affichier un bout de page uniquement si tu as le rôle admin:
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <jguard:hasPrincipal name="admin">
       administrator zone
    </jguard:hasPrincipal>

    tu peux aussi afficher sélectivement un bout de page suivant l'accès à une url:
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <jguard:authorized uri="/myAction.do">
    you've got access to myAction
    </jguard:authorized>

    et afficher les données de l'utilisateurs dans la jsp:
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <jguard:privCredential id="country" default="unknown" />
    ceci affichera la valeur de l'attribut 'country' de l'utilisateur, et si cet attribut n'est pas présent, cela affiche 'unknown'.

    une webapp d'exemple est fournie avec la distribution pour voir jGuard en action.

    cela répond-il à ta question?

    Charles(jGuard team).

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 34
    Par défaut
    Merci!!!

    Oui je pense avoir bien saisi le truc, je pense utiliser une config de jGuard avec fichier XML pour définir les rôles attendus. Ensuite lorsque l'utilisateur va saisir ses données je recupere son role dans la base et je peux ainsi m'assurer que pour accéder à telle ou telle page il a le bon role...

    Parce que je ne veux pas utiliser des tables particulières dans ma base de données pour gérer l'authentification j'ai deja une table contenant les rôles et je veux donc utiliser la config xml de jGuard et donc comparer le role que j'ai recuperé dans ma base avec ceux dans cette conifg xml...

    Je ne sais pas si je suis bien clair la...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 34
    Par défaut
    En fait je veux juste pouvoir récupérer le role d'un utilisateur dans une base MySQL quelconque et ensuite en m'appuyant sur la config xml de jGuard vérifier s'il peut accéder aux pages...

    Parce que pour que le role soit automatiquement affecté dans l'objet Subject c dans le cas d'une config jGuard basée sur une MySQLLoginModule??

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 136
    Par défaut
    la récupération dans la base Mysql des rôles se fait effectivement via des loginModules, dont MySQLLoginModule.
    la requête est écrite dans le code de celui-ci. la partie authorization exécute les requêrtes présentes dans des fichiers properties pour qu'une customization soit possible.
    la partie authentification (dont les loginmodules), utilisera le même mécanisme de chargement de fichiers properties, dans la version qui sortira dans maxi une semaine.
    cela te permettra de customiser les requêtes effectuées sur ta base mysql, et donc d'interroger des tables ayant des noms et structure différentes de celles attendues par défaut par jguard.
    tu peux donc pour l'instant tester jGuard et le configurer pour utiliser le fichier XML(comme configuré dans la webapp d'exemple fournie) en attendant.

    si tu souhaites ne pas attendre une semaine, tu peux coder une version légérement modifié de MySQLLoginModule qui effectuera la bonne requête.

    y-a-t-il des points à éclaircir quant au mécanisme ou fonctionnalités de jGuard?

    Charles(jGuard team).

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 34
    Par défaut
    OK, bon je pense avoir compris...

    En fait moi de mon cote j'ai une base MySQL avec une table utilisateur contenant le login, le mot de passe et le role de chaque utilisateur. Si je veux utiliser jGuard avec cette table il faut que je modifie un peu le code du MySQLLoginModule pour pouvoir accéder aux champs que j'ai moi meme définis et non pas ceux qui sont attendus par défaut (JG_USER par exemple).

    Ainsi en modifiant ce modile MySQL le processus que tu as détaillé précedemment se déroule c'est à dire que je trouverai dans Subject et je pourrai accéder aux roles avec subj.getPrincipals()...

    Est-ce que j'ai bien saisi l'idée??

    En tout cas merci beaucoup de me répondre aussi vite Je fais ma pause repas et je recommence cet aprem!!

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 136
    Par défaut
    concernant le loginmodule, c'est exactement ça.

    pour éviter éventuellement des problèmes, je te conseille de mettre ton loginModule customisé dans le même répertoire que le jar jGuard_jvm.jar.
    comme tu utilises jboss 4.0x, tu dois placer jGuard_jvm.jar(et ton loginModule) dans {JBOSS_HOME}/server/default/lib, et ton war dans {JBOSS_HOME}/server/default/deploy.


    Charles(jGuard team).

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 34
    Par défaut
    ok super

    donc je customise mon propre loginModule que j'utilise à la place de "l'officiel" et c bon!!! le top!

    Merci beaucoup pour ton aide

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 136
    Par défaut
    si tu as d'autres questions, n'hésites pas à les poser sur les forums du projet situés sur sourceforge(mais en anglais).
    tu auras le support d'une plus grande partie de l'équipe(peu sont francophones),et les francophones du projet y sont plus présent que sur developpez.

    cordialement,

    Charles(jGuard team).

  13. #13
    Membre confirmé Avatar de Original Prankster
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    226
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 226
    Par défaut
    Pas mal le truc de JGuard, mais pourquoi ne pas utiliser simplement un SessionBean propre à un utilisateur loggé ?

    Lors de sa connexion les données peuvent être récupérées dans la base MySQL, et stockées dans le Bean. Il suffit alors pour chaque JSP de vérifier dans ce Bean si les droits de l'utilisateur sont toujours positionnés ! Le cas échéant la page est affichée, sinon redirection vers une page d'erreur/ de login.

    Je dis une bêtise, ou c'est valable aussi ?

  14. #14
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par Original Prankster
    Pas mal le truc de JGuard, mais pourquoi ne pas utiliser simplement un SessionBean propre à un utilisateur loggé ?

    Lors de sa connexion les données peuvent être récupérées dans la base MySQL, et stockées dans le Bean. Il suffit alors pour chaque JSP de vérifier dans ce Bean si les droits de l'utilisateur sont toujours positionnés ! Le cas échéant la page est affichée, sinon redirection vers une page d'erreur/ de login.

    Je dis une bêtise, ou c'est valable aussi ?
    Jguard a l'interet de se baser sur un standard , JAAS.
    Je trouve que c'est assez lour à mettre en oeuvre pour des petites applications dont le sécurité n'est pas très primordiale.
    Pour Struts, on pourrait suredefinir la classe RequestProcessor, redefinir la méthode processRoles qui verifie les roles definis dans l'action.
    on pourrait ainsi verifier si l'utilisateur s'est bien identifié avant d'acceder à l'application, verifier s'il a le role pour le faire ...

  15. #15
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 136
    Par défaut
    Pas mal le truc de JGuard, mais pourquoi ne pas utiliser simplement un SessionBean propre à un utilisateur loggé ?
    l'intérêt de jGuard par rapport à la solution dont tu parles:
    - tu n'as pas de code à écrire: les étapes de redirection vers des écrans de login, de pages non autorisées, les requêtes en base, bref, toute la mécanique sont déjà faites
    - ta solution implique l'utilisation d'ejb, alors que jGuard ne nécessite q'un container de servlets
    - des failles de sécurité peuvent être présentes avant que ton contrôle effectué sur ton sessionBean ne s'éxécute(jGuard utilise un servlet filter qui est la première chose exécutée)
    - jGuard repose sur JAAS qui est contenu dans java, une solution standardisée pour s'authentifier et gérer les permissions
    - des taglibs sont déjà présentes pour cacher tout ou partie des pages
    - jGuard reposant sur JAAS, te permet d'écrire des webapps ayant (pour ceux qui le souhaite uniquement),un niveau de sécurité très élévé(repose sur les permissions de java).
    - repose sur le modèle RBAC(utilisateurs, rôles, permissions) permettant une grande flexibilité
    etc....

    je m'arrête là sur la comparaison,je n'ai pas envie de vous saouler.....

    Charles(jGuard team).

  16. #16
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 136
    Par défaut
    Je trouve que c'est assez lour à mettre en oeuvre pour des petites applications dont le sécurité n'est pas très primordiale.
    as-tu déjà essayé de mettre en place jGuard?
    celui-ci te cache complétement le framework JAAS(et donc la complexité dont tu parles).
    la création des rôles et des permissions,leur mise à jour peut être efectuée via des écrans web fournis(donc à priori pas très complexe).

    pour informations, l'utilisation dans struts de processRoles(sans surcharge) implique la déclaration dans le struts-config,donc de facon figée, des rôles.
    la surcharge du requestProcessor n'est pas tres complexe, mais est quand même à faire pour cette solution. les étapes de requêtes en base, la mécanique de redirection etc..., est à réaliser. c'est donc du travail qui n'est plus à faire avec jGuard.

    pour info, les applications utilisant pour leurs rôles la méthode isUserInRole de HttpServletRequest, n'ont pas à être modifiées en profondeur:jGuard retourne les rôles (via une interception)définis dans son datasource(XML/base de données).

    bref, jGuard peut être remplacé par d'autres systèmes,dont ceux codés à la main, mais je pense permet un gain de temps appréciable.

    Charles(jGuard team).

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 34
    Par défaut
    Bon je pense que je vais pour l'instant me contenter de la version XML et attendre la nouvelle version qui permet de configurer les requêtes sur la base, ça me semble un choix plus raisonnable...

    Si tu me dis que le nouvelle version devrait sortir dans maxi 1 semaine c bon pour moi

  18. #18
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 136
    Par défaut
    OK!
    stay tuned!



    Charles.(jGuard team).

    ps:petite exclu, la prochaine version intégrera JCaptcha.

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 34
    Par défaut
    Bon.... problème...

    J'ai voulu tester l'example fourni avec jGuard et JBoss 4.0.2 et j'ai beau suivre ça
    the jGuard-jvm-x.xx.jar should be placed in the {JBOSS_HOME}/server/default/lib directory. jGuardExample.war archive has been placed in the {JBOSS_HOME}/server/default/deploy directory.
    rien ne marche au niveau du deploiement....

    J'ai des erreurs du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    18:01:37,539 ERROR [[/jGuardExample]] Exception starting filter AccessFilter
    java.lang.IllegalArgumentException: file://////C:\Documents and Settings\Julien\Mes documents\Esil\A3\Module Dev Logiciel\Projet\Soft\jboss-4.0.2\server\default\.\tmp\deploy\tmp13097jGuardExample-exp.war\WEB-INF\conf\jGuard\jGuardConfiguration.xml does not point to an XML document
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    18:01:37,799 ERROR [[/jGuardExample]] Exception starting filter sitemesh
    com.opensymphony.module.sitemesh.factory.FactoryException: Cannot construct Factory : com.opensymphony.module.sitemesh.factory.DefaultFactory: java.lang.reflect.InvocationTargetException
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Caused by: com.opensymphony.module.sitemesh.factory.FactoryException: Could not initialize DecoratorMapper : com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper: java.lang.InstantiationException: javax.servlet.ServletException: Could not read the config file: /WEB-INF/conf/sitemesh/decorators.xml[quote]
     
     
    .. voila donc je sais pas trop comment faire...[/quote]

  20. #20
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 136
    Par défaut
    en regardant les erreurs,
    je pense que le soucis vient soit du fait que jboss est installé dans une arborescence ayant un chemin possédant des espaces (file://////C:\Documents and Settings......),ou que tu aies configuré jBoss pour qu'il ne décompresse le war qu'en mémoire et non dans un répertoire donné.

    pour résoudre le problème, je te conseille de vérifier que le war est bien décompressé:
    si ce n'est pas le cas, il faut paramétrer pour que jboss le décompresse (paramétrage par défaut).
    si la décompression s'est bien effectuée, peux-tu essayer d'installer ton jboss dans un répertoire n'ayant pas d'espaces dans le path?

    tiens-moi au courant si ces pistes ont résolu ton problème.
    amicalement,
    charles(jGuard team).
    ps:pour info,nous avons testé jGuard sur jBoss 4.03, donc je ne pense pas quil y ait de grandes différences.

Discussions similaires

  1. Formulaire J2EE - Gestion utilisateur
    Par Fred30 dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 18/12/2013, 08h45
  2. [J2EE] Gestion bancaire
    Par manidis dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 09/08/2011, 08h46
  3. Réponses: 5
    Dernier message: 09/04/2009, 22h35
  4. Réponses: 4
    Dernier message: 30/12/2005, 11h07
  5. [JSP][Servlet][Securité] Configuration du login
    Par jaoued dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 15/07/2004, 14h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo