0. EJB 3.0 sécurisés 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.

0-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.

I. 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.
Image non disponible
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.
Image non disponible

II. Créer un EJB

Pour créer un EJB sans état, cliquez avec le bouton droit sur Login-ejb -> New -> Session Bean.
Image non disponible
Remplissez le nom de l'EJB avec Calculator, le package avec demo, sélectionnez Remote et désélectionnez Local. Laissez stateless sélectionné.

II-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 2 paramètres a et b en tant que type int. Cliquez OK.
Image non disponible
Remplacez
 
Sélectionnez
return 0
par
 
Sélectionnez
return a + b 

II-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'.
Image non disponible
Remplacez
 
Sélectionnez
return null;
par
 
Sélectionnez
return "Hello " + name;

II-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 :
 
Sélectionnez

			@DeclareRoles("admin")
			
Avant la méthode hello, ajoutez une annotation pour restreindre l'accès de la méthode au rôle "admin":
 
Sélectionnez

			@RolesAllowed("admin")
			
Le source de l'EJB doit ressembler à cela:
 
Sélectionnez

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;
	}
}
			

III. Le code client

Ouvrez le noeud 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:
 
Sélectionnez

@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:
 
Sélectionnez

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"));
    }
} 

III-A. Lancer le client

Image non disponible
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:
Image non disponible
Entrez n'importe quel code client et mot de passe, le projet va se terminer en echec car nous n'avons pas défini d'utilisteur.

III-B. Créer les utilisateurs

Dans l'onglet Runtime (ou service avec NB 6.0), ouvrez le noeud Servers et sélectionnez View Admin Console.
Image non disponible
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.
Image non disponible
Sélectionnez Configuration -> Security -> Realms -> file et cliquez Manage Users. Cliquez New pour créer 2 nouveaux utilisateurs, un dans le groupe user, l'autre dans le groupe admin. Dand mon exemple, l'utilisateur demo est dans le groupe admin et l'utilisateur user est dans le groupe user.

III-C. 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 par :
 
Sélectionnez

<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:
Image non disponible
Image non disponible
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 noeud Processes, cliquez avec le bouton droit sur Login (Run) et sélectionnez Terminate Process.

IV. 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 conclu 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.