Você precisa gerenciar um mapa de usuários logados,
Map<String, String> userToSessionIdMap
quando o usuário faz login, você verifica se existe alguma sessão para este nome de usuário, se sim, nega, senão, permite o login, Agora, no logout, você precisa remover a entrada do mapa, também precisa implementar
HttpSessionBindingListener
então, quando a sessão expira, ele remove a entrada novamente Veja também