Трюк с аннулированием сессии не работает. Кажется, аутентификация Spring где-то буферизует идентификатор сеанса и принимает COOKIE даже, если сеанс был признан недействительным.
Другое решение - очистить контекст безопасности Spring вручную:
public void manualLogout() {
SecurityContextHolder.getContext().setAuthentication(null);
}
Вот код, как войти в систему вручную (если кому-то нужно):
public void doManualLogin(HttpServletRequest request, String u, String p) {
UsernamePasswordAuthenticationToken token =
new UsernamePasswordAuthenticationToken(u, p);
token.setDetails(new WebAuthenticationDetails(request));
Authentication auth = authenticationProvider.authenticate(token);
SecurityContextHolder.getContext().setAuthentication(auth);
}
, где authenticationProvider - это бин из вашей весенней конфигурации, которая реализует
org.springframework.security.authentication.AuthenticationProvider