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