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.