Archive for octobre 15th, 2006

L’authentification avec Wicket

Une chose primordiale au niveau du développement d’application web est l’authentification. Nous allons voir ici comme mettre en place ce mécanisme au niveau d’une application wicket:

Tout d’abord il faut utiliser le module wicket-auth.

La première étape est d’écrire la classe de l’application qui au lieu d’étendre la classe WebApplication il s’agit d’étendre la classe : AuthenticatedWebApplication
[UPDATE] Mise à jour de l’exemple suite au commentaire de Philoops

[java] public class MonAppWeb extends AuthenticatedWebApplication {         public static class MaSession extends AuthenticatedWebSession         {                 public MaSession(AuthenticatedWebApplication application)                 {                         super(application);                 }                 public boolean authenticate(String username, String password)                 {                         //tout type d'authentification peut être fait                         return username.equals("vincent") && password.equals("mdp");                 }                 public Roles getRoles()                 {                         if (isSignedIn())                         {                                 return new Roles("RoleUtilisateur");                         }                         return null;                 }         }         protected Class< ? extends AuthenticatedWebSession> getWebSessionClass()         {                 return MaSession.class;         }         protected Class< ? extends SignInPage> getSignInPageClass()         {                 return AuthPage.class;         }         public Class getHomePage()         {                 return Accueil.class;         } } 

l’application est maintenant en place il reste à definir la page pour l’authentification :

[java] public final class AuthPage extends wicket.authentication.SignInPage { } 
[xml] <html> <head>     <title>Autentification</title>     <link rel="stylesheet" type="text/css" href="style.css"/> </head> <body>         <h2>Identifiication</h2>     <i>login et mot de passe</i>     <p>     <span wicket:id="signInPanel"/> </body> </html> 

On definit maintenant une page pour se deconnecter :

[java] public class SignOutPage extends wicket.authentication.SignOutPage { } 
[xml] <html> <head>     <title>Deconnection</title>     <link rel="stylesheet" type="text/css" href="style.css"/> </head> <body>         <h2>Aurevoir!</h2>         <p>         <wicket:link>                 <a href="Accueil.html">Accueil</a>         </wicket:link> </body> </html> 

On peut maintenant definir 2 pages : une qui necessite une identification et l’autre accessible à tout le monde. Notons que l’authentification se fait maintenant par annotation java

[java] public class Accueil extends WebPage { } 
[xml] <html> <head>     <title>Accueil</title>     <link rel="stylesheet" type="text/css" href="style.css"/> </head> <body>     <h2>Bienvenue</h2>     Page accessible à tout le monde.     <p>         <wicket:link><a href="AdminPage.html">Page administrateur</a></wicket:link><br/>         <wicket:link><a href="SignOutPage.html">Deconnection</a></wicket:link> </body> </html> 
[java] @AuthorizeInstantiation("RoleUtilisateur") // page necessitant une authentification public class AdminPage extends WebPage { } 
[xml] <html> <head>     <title>Page administrateur</title>     <link rel="stylesheet" type="text/css" href="style.css"/> </head> <body>     <h2>Administrateur

     <p>         <wicket:link><a href="Accueil.html">Accueil</a></wicket:link><br/>         <wicket:link><a href="SignOutPage.html">Deconnection</a></wicket:link> </body> </html> 

Et voila, ce code est suffisant à lui même pour fonctionner.

Wicket un framework de dévloppement d’applications web 100% java

J’ai décidé d’ouvrir une nouvelle catégorie sur mon blog pour parler de ce nouveau framework de développement d’application web. Un nouveau framework! encore un! Oui en effet il existe déjà un très grand nombre de framework pour écrire des applications web comme Structs, RubyOnRails, Cocoon, etc… Etant un très gros utilisateur de Cocoon je me suis intéressé à un autre framework : Wicket.

La première question est de se demander quel est l’interret d’utiliser un autre framework. Evidemment tous ces frameworks ne sont pas équivalents. Ceux qui connaissent Cocoon savent qu’il permet de faire n’importe quel type d’application avec quand même de très nombreux atouts en ce qui concerne la publication de contenu. Wicket lui doit plutôt être comparé au block Form de Cocoon. En effet son orientation est clairement l’écriture de formulaires web. Une autre grosse différence avec Cocoon est le type de langage utilisé : Cocoon permet de développer sans forcement avoir de grosses connaissances Java puisqu’il est basé sur XML/XSL alors que Wicket est beaucoup plus orienté Java avec une API très proche de SWT.

Un nouvel avantage qui va donner de la crédibilité à Wicket aux yeux des décideurs. Le projet est actuellement en « incubation » dans la fondation apache… Wicket va donc d’ici peu devenir un projet Apache…