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
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 :
public final class AuthPage extends wicket.authentication.SignInPage
{
}
<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 :
public class SignOutPage extends wicket.authentication.SignOutPage
{
}
<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
public class Accueil extends WebPage
{
}
<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>
@AuthorizeInstantiation("RoleUtilisateur") // page necessitant une authentification
public class AdminPage extends WebPage
{
}
<html>
<head>
<title>Page administrateur</title>
<link rel="stylesheet" type="text/css" href="style.css"/>
</head>
<body>
<h2>Administrateur</h2>
<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.