2012-05-10 7 views
1

Je sais que cette question est une bonne question, car il est ouvert à un gazillion de réponses, mais la voici:authentification: sa forme la plus simple en Java EE 6

Je suis nouveau à Java EE 6 (sur JBoss AS 7), Je viens d'un monde de Tomcat + printemps. Ma première vraie application web est quelque chose comme un simple crud avec jsf jpa hibernate et ejb. Maintenant, je dois sécuriser une URL (/ admin/*) avec le formulaire de connexion le plus trivial. J'ai déjà deux tables (entités hibernate) nommées "User" (nom d'utilisateur, mot de passe, role_id et autres données) et "Role" (code, nom et peu plus). Je pourrais faire mon propre LoginController, session étendue qui gère les problèmes de connexion mais je ne sais pas comment dire "hé, c'est seulement pour/admin path!" Alors .... J'ai commencé à lire sur la configuration web.xml: les contraintes de sécurité, les domaines jdbc, etc. Cependant, désolé, mais je ne peux toujours pas atteindre un bon point de connaissance, je suis trop accro aux didacticiels et à l'apprentissage par la pratique.

Pouvez-vous m'aider à trouver un exemple de projet avec un formulaire de connexion simple? Ou au moins un tutoriel ou quelques conseils sur la façon de lier mon formulaire de connexion à mes tables db? Je n'ai pas besoin de 500 pages de documentation précise. Juste essayer de faire fonctionner l'authentification "standard".

+0

Jetez un oeil à [cette question et réponse] (http://stackoverflow.com/q/10483132/620338). Le PO a mis des liens intéressants pour vous. La réponse montre ma propre configuration d'exemple (de travail). –

Répondre

1

Ok. Tout d'abord, le mécanisme d'authentification n'est pas fourni par le standard Java EE. Seule l'authentification basée sur les rôles fait partie de la spécification. Ainsi, chaque serveur d'application doit avoir son mécanisme d'authentification personnalisé, ce qui nous permet d'utiliser la base de données, LDAP, etc. pour stocker les informations d'identification de l'utilisateur.

Dans le cas de JBoss, il ressemble à ceci.

(1) Vous devez définir une contrainte de sécurité dans votre fichier web.xml (il y a des tonnes de tutoriels pour ce faire). Il indique quelles URL sont nécessaires à la connexion. Vous devez définir l'élément login-config afin de choisir comment l'utilisateur va se connecter - en utilisant une fenêtre contextuelle du navigateur ou un formulaire personnalisé.

(2) Vous devez définir le domaine de sécurité côté JBoss dans configuration/standalone.xml. Voir this example par exemple.

(3) Vous devez joindre (1) et (2). Ceci est fait dans le fichier jboss-web.xml avec WEB-INF de votre application. Il ressemble plus ou moins

<?xml version="1.0" encoding="UTF-8"?> 
<jboss-web> 
      <security-domain>NAME-OF-DOMAIN-DEFINED-IN-STEP-2</security-domain> 
      <context-root>ROOT-OF-YOUR-APP</context-root> 
</jboss-web> 

Je ne sais pas comment il est en cas de JBoss 7, mais dans les versions précédentes vous avez besoin pour ajouter le préfixe java:/jaas/, donc le contenu de sécurité domaine serait java:/jaas/NAME-OF-DOMAIN-DEFINED-IN-STEP-2. En outre, si vous connaissez Spring Framework, vous pouvez envisager l'utilisation de Spring Security, en ignorant les mécanismes Java EE.

+0

Merci Piotr, c'est une bonne réponse, je l'accepterai si je réussis. La première chose qui attire mon attention est: qu'en est-il d'un jboss avec 100 webapps déployés? A l'étape 2 = beaucoup de ? –

+1

> Tout d'abord, le mécanisme d'authentification n'est pas fourni par la norme Java EE. - Ce n'est pas vrai. Java EE 6 a un standard appelé JASPIC (JASPI/JSR 196). –