Assez vieille question, mais je viens de trébucher dessus tout en recherchant exactement le même problème. Donc, si quelqu'un d'autre vient à travers cela, voici ma solution.
Le problème est que AuthenticatedWebSession # isSignedIn() ignore le SecurityContext et vérifie son propre indicateur booléen à la place. Comme il n'est pas possible de surcharger la méthode finale #isSignedIn(), il doit y avoir une solution de contournement. Je suis allé pour synchroniser l'état juste avant Wicket démarre le traitement de la demande actuelle WebRequestCycle personnalisée remplaçant #onBeginRequest():
// MyApplication.java
public MyApplication extends AuthenticatedWebApplication {
// SNIP
@Override
public RequestCycle newRequestCycle(final Request request, final Response response) {
return new WebRequestCycle(this, (WebRequest) request, (WebResponse) response) {
@Override
protected void onBeginRequest() {
MySession.get().updateSignIn();
}
};
}
}
// MySession.java
public class MySession extends AuthenticatedWebSession {
// SNIP
void updateSignIn() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
signIn(auth != null && auth.isAuthenticated());
}
}
Alternativement, AuthenticatedWebSession et AuthenticatedWebApplication pourraient être abandonnés alltogether comme le reste de portillons-auth-rôles ne les exige pas. Il suffit d'une duplication de code depuis AuthenticatedWebApplication pour que tout fonctionne de la même manière.