+ /**
+ * Super implementation removes all {@link Principal}, the Spring
+ * {@link org.springframework.security.Authentication} as well. Here we
+ * simply clear Jackrabbit related {@link Principal}s.
+ */
+ @Override
+ public boolean logout() throws LoginException {
+ clearPrincipals(AdminPrincipal.class);
+ clearPrincipals(ArgeoSystemPrincipal.class);
+ clearPrincipals(AnonymousPrincipal.class);
+ clearPrincipals(GrantedAuthorityPrincipal.class);
+
+ // we resync with Spring Security since the subject may have been reused
+ // in beetween
+ // TODO: check if this is clean
+ // subject.getPrincipals().addAll(syncPrincipals());
+
+ return true;
+ }
+
+ private <T extends Principal> void clearPrincipals(Class<T> clss) {
+ Set<T> principals = subject.getPrincipals(clss);
+ if (principals != null)
+ principals.clear();
+ }
+