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.