dimanche 28 février 2010

Installation du jboss jbpm 4.3



Ce tutoriel a pour but d'installer Jbpm 4.3 avec le serveur d’application jboss 5.0.1.GA. La base de données utilisée est Mysql 5.


Modification de la configuration 

Dans le fichier JbpmHome/install/build.xml:


<property name="jboss.version" value="5.1.0.GA" >
<property name="jboss.parent.dir" value="${jbpm.home}" >
<property name="jboss.home" value="JbossHome" >


Dans le fichier JbpmHome/install/jdbc/mysql.properties:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/jbpm4
jdbc.username=jboss
jdbc.password=jboss

Création de la base de données :

CREATE DATABASE jbpm4;
GRANT ALL PRIVILEGES ON *.* TO jboss@localhost
-> IDENTIFIED BY 'jboss' WITH GRANT OPTION;

Installation de la base: 

Il suffit d’exécuter la cible create.jbpm.schema dans le dossier JbpmHome/install.

> ant –Ddatabase=mysql create.jbpm.schema

Installation de jbpm dans jboss:

Il suffit d’exécuter la cible

> ant –Ddatabase=mysql install.jbpm.into.jboss

samedi 20 février 2010

Tutoriel Jaas avec jboss

Bonjours,
Avant de commencer il faut préciser que dans ce tutoriel je vais utiliser l’implémentation Jboss de Jaas.
Pour ajouter la sécurité Jaas à un projet Jee, il faut modifier 3 fichiers xml :
- login-config.xml dans JBOSS_HOME/server/default/conf
- jboss-web.xml dans /WebContent/WEB_INF
- web.xml dans /WebContent/WEB_INF

Dans le fichier login-config.xml on doit ajouter les règles de sécurités :
<application-policy name="mysqlLogin">
<authentication>
<login-module
code="org.jboss.security.auth.spi.DatabaseServerLoginModule"
flag="required">
<module-option name="dsJndiName">java:/MySqlDS
</module-option>
<module-option name="principalsQuery">
select passwd from USERS where login=?
</module-option>
<module-option name="rolesQuery">
select role, 'Roles' from USER_ROLES where login=?
</module-option>
</login-module>
</authentication>
</application-policy>

Ce code permet de préciser un nouveau « login-module »
La classe DatabaseServerLoginModule permet de déterminer l’implémentation jboss nécessaire. Il y a plusieurs autres implémentations. Celle la permet de réaliser l’authentification à partir de la base de données.
dsJndiName permet de préciser le nom JNDI du data source qui permet de se connecté à la base de données.
principalsQuery permet de préciser la requête sql à utiliser pour l’authentification
rolesQuery permet de préciser la requête sql à utiliser pour l’autorisation.
Dans le fichier jboss-web.xml, il faut ajouter le nom JNDI du domaine de sécurité.


Dans notre cas c’est java:/jaas/mysqlLogin

<jboss-web>
<security-domain>java:/jaas/mysqlLogin</security-domain>
</jboss-web>
C’est à partir de ce fichier que l’application va pouvoir déterminé les règles de sécurités.
Dans le fichier web.xml il faut mettre les configurations suivantes :

<security-constraint>
<web-resource-collection>
<web-resource-name>webRessourcetest</web-resource-name>
<url-pattern>/faces/hich.jsp</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>

</web-resource-collection>
<auth-constraint>
<role-name>hichem</role-name>
</auth-constraint>

<user-data-constraint>
<description />
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint/>

<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/bad-login.jsp</form-error-page>
</form-login-config>
</login-config>
<security-role>
<role-name>hichem</role-name>
</security-role>

Dans cet exemple j’ai sécurisé la page admin.jsf. Seulement le Principale possédant le rôle « hichem » qui peut y accéder.
Si on fait un appel direct à cet page une redirection sera faite à login.jsf.
Si les paramètres d’authentification sont invalides une redirection sera effectuée vers la page badlogin.jsf.
Il reste alors à créer la page login.jsp suivante:

<form name="loginForm" method="post" action="j_security_check">
<table>
<tr>
<td>User Name:</td>
<td><input type="text" name="j_username"/></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="j_password"/></td>
</tr>
<tr colspan="2">
<td><input type="submit" value="login"></td>
</tr>
</table>
</form>

Ainsi on a put sécuriser notre application web.
Maintenant pour sécuriser nos EJB sessions on 3 méthodes :
- avec les annotations.
- Avec les fichiers de configuration xml.
- En faisant appel direct au context.

Dans ce tutoriel je vais utiliser la dernière

@Stateless
public class HelloJaasBean implements HelloJaasLocal {
@Resource SessionContext context;
public void sayHelloHichem() {
if (context.isCallerInRole("hichem"))
System.out.println("hello hichem");
}
}
Ainsi Seulement les personnes possédant le rôle « hichem » peuvent accéder à cette méthode