EJB 3.0 sécurisés et Java Web Start

Patrice Secheresse

Introduction à la sécurité des EJB 3.0 en utilisant un client Swing démarré avec Java Web Start grâce à Glassfish.

- Titre : EJB 3.0 sécurisés et Java Web Start

- Auteur : Patrice Secheresse

- Parution : 21 novembre 2007

- Mise à jour : 27 mars 2020

- Licence : Copyright ® 11/09/2007 Patrice Secheresse. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. EJB 3.0 sécurisé et application client Java Web Start

- I-A. Préparation

- II. Création du projet

- III. Créer un EJB

- III-A. Créer la méthode add

- III-B. Créer la méthode hello

- III-C. Ajouter les annotations de sécurité

- IV. Le code client

- V. Lancer le client

- VI. Créer les utilisateurs

- VII. Rôle mapping

- VIII. Démarrer avec Java Web Start

I - EJB 3.0 sécurisé et application client Java Web Start

Une option de Glassfish est la possibilité de démarrer une application client à partir du serveur avec Java Web Start. Associé avec NetBeans, il est facile de créer une application sécurisée aisément distribuable.

I-A - Préparation

Ce tutoriel est basé sur NetBeans. Vérifiez que vous avez un serveur GlassFish enregistré (ou le serveur Sun Java System Application Server version 9 inclus dans JavaEE 5 SDK). Pour ajouter un serveur, utilisez le menu Tools -> Server Manager et ajoutez votre serveur GlassFish ou Sun Java System Application 9.

II - Création du projet

Créez un nouveau projet en cliquant sur le bouton New Project et sélectionnez Enterprise, Projects -> Enterprise Application et cliquez Next.

Dans la fenêtre 'Name and Location', saisissez le nom du projet, par exemple Login, votre serveur avec le serveur GlassFish ou le serveur Sun Java System Application Server, la version Java avec Java EE 5 et sélectionnez Create EJB Module, désélectionnez Create Web Application Module, sélectionnez Create Application Client Module. Laissez les valeurs par défaut pour les noms de module et pressez Finish.

III - Créer un EJB

Pour créer un EJB sans état, cliquez avec le bouton droit sur Login-ejb -> New -> Session Bean.

Remplissez le nom de l'EJB avec Calculator, le package avec demo, sélectionnez Remote et désélectionnez Local. Laissez stateless sélectionné.

III-A - Créer la méthode add

Dans le source CalculatorBean.java, cliquez avec le bouton droit -> EJB Methods -> Add Business Method. Nommez la méthode 'add' avec int en tant que type retourné et ajoutez deux paramètres a et b en tant que type int. Cliquez OK.

Remplacez

return 0

par

return a + b

III-B - Créer la méthode hello

Répétez la même démarche pour ajouter une méthode une méthode métier (business method) 'hello' avec un type String en retour et un type String pour le paramètre que nous nommerons 'name'.

Remplacez

return null;

par

return "Hello " + name;

III-C - Ajouter les annotations de sécurité

Le but est simplement de limiter l'accès à la méthode hello tout en laissant la méthode add non sécurisée.

Avant @Stateless, ajoutez une annotation pour déclarer le rôle admin. Insérez la ligne :

@DeclareRoles("admin")

Avant la méthode hello, ajoutez une annotation pour restreindre l'accès de la méthode au rôle « admin » :

@RolesAllowed("admin")

Le source de l'EJB doit ressembler à cela :

package demo;

import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.Stateless;

/**
*
* @author PSe
*/
@DeclareRoles("admin")
@Stateless
public class CalculatorBean implements CalculatorRemote {
/** Creates a new instance of CalculatorBean */
public CalculatorBean() {
}

public int add(final int a, final int b) {
return a + b;
}

@RolesAllowed("admin")
public String hello(final String name) {
return "Hello " + name;
}
}

IV - Le code client

Ouvrez le nœud Login-app-client dans projets, ouvrez Source Package, login et double cliquez sur Main.java.

Cliquez avec le bouton droit dans le source, sélectionnez Entreprise Resources -> Call Enterprise Bean et sélectionnez CalculatorBean. Pressez OK. La ligne pour référencer le bean est automatiquement ajoutée :

@EJB
private static CalculatorRemote calculatorBean;

Add the lines below to call the methods:

javax.swing.JOptionPane.showMessageDialog(null, "2 + 2 = " + calculatorBean.add(2, 2));
javax.swing.JOptionPane.showMessageDialog(null, calculatorBean.hello("Mr admin"));

Résolvez les imports (pressez Alt+Maj+F NB 5.5 ou Alt+Maj+I NB 6.0). Le source doit ressembler à cela :

package login;

import demo.CalculatorRemote;
import java.rmi.RemoteException;
import javax.ejb.EJB;

/**
*
* @author PSe
*/
public class Main {
@EJB
private static CalculatorRemote calculatorBean;
/** Creates a new instance of Main */
public Main() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
javax.swing.JOptionPane.showMessageDialog(null, "2 + 2 = " + calculatorBean.add(2, 2));
javax.swing.JOptionPane.showMessageDialog(null, calculatorBean.hello("Mr admin"));
}
}

V - Lancer le client

Le code peut déjà être exécuté. Pressez le bouton Run, le projet est déployé puis lancé. Vous allez obtenir une fenêtre de login :

Entrez n'importe quel code client et mot de passe, le projet va se terminer en échec, car nous n'avons pas défini d'utilisateur.

VI - Créer les utilisateurs

Dans l'onglet Runtime (ou service avec NB 6.0), ouvrez le nœud Servers et sélectionnez View Admin Console.

NetBeans va ouvrir automatiquement le navigateur sur la page pour se logger sur le serveur. Entrez le code administrateur et le mot de passe que vous avez fourni lors de l'installation.

Sélectionnez Configuration -> Security -> Realms -> file et cliquez Manage Users. Cliquez New pour créer deux nouveaux utilisateurs, un dans le groupe user, l'autre dans le groupe admin. Dans mon exemple, l'utilisateur demo est dans le groupe admin et l'utilisateur user est dans le groupe user.

VII - Rôle mapping

Pour associer les noms de rôle, ouvrez dans l'onglet project le projet Login -> Configuration Files et double cliquez sur sun-application.xml. Cliquez sur Edit As XML et remplacez <sun-application/> par :

<sun-application>
<security-role-mapping>
<role-name>user</role-name>
<group-name>user</group-name>
</security-role-mapping>
<security-role-mapping>
<role-name>admin</role-name>
<group-name>admin</group-name>
</security-role-mapping>
</sun-application>

Relancez l'application, entrez l'utilisateur demo et le mot de passe, vous devrez voir deux fenêtres :

Si vous essayez avec un autre utilisateur en dehors du groupe admin, vous ne verrez que la première fenêtre et l'application génèrera une erreur.

Note : avec NB 5.5.1, il faut mettre fin au programme après son exécution. Pour cela, sélectionnez l'onglet Runtime, ouvrez le nœud Processes, cliquez avec le bouton droit sur Login (Run) et sélectionnez Terminate Process.

VIII - Démarrer avec Java Web Start

Si vous ouvrez votre navigateur et entrez l'adresse http://localhost:8080/Login/Login-app-client , l'application va démarrer automatiquement. Cela conclut la démo et donne un aperçu de la puissance de NetBeans et GlassFish. Ces produits sont faciles d'utilisation, bien conçus, efficace et conçus pour des solutions d'entreprise. Associé à la puissance des annotations de Java EE 5, vous pouvez construire une solution sans maux de tête.