@Handle public ClientApiSuccess handle(HttpServletRequest request) throws Exception { String userId = CurrentUser.getUserId(request); String sessionId = request.getSession().getId(); this.userSessionCounterRepository.deleteSession(userId, sessionId); CurrentUser.clearUserFromSession(request); auditService.auditLogout(userId); request.getSession().invalidate(); return VisalloResponse.SUCCESS; } }
private boolean decrementUserSessionCount(AtmosphereResource resource) { String userId = getCurrentUserId(resource); if (userId == null) { LOGGER.debug("userId could not be found in Atmosphere session"); return false; } return userSessionCounterRepository.deleteSession(userId, resource.uuid()) < 1; }
@Override public void valueUnbound(HttpSessionBindingEvent event) { try { UserSessionCounterRepository userSessionCounterRepository = InjectHelper.getInstance(UserSessionCounterRepository.class); WorkQueueRepository workQueueRepository = InjectHelper.getInstance(WorkQueueRepository.class); AuditService auditService = InjectHelper.getInstance(AuditService.class); int sessionCount = userSessionCounterRepository.deleteSession(userId, event.getSession().getId()); if (sessionCount < 1) { UserStatus status = UserStatus.OFFLINE; LOGGER.info("setting userId %s status to %s", userId, status); UserRepository userRepository = InjectHelper.getInstance(UserRepository.class); User user = userRepository.setStatus(userId, status); workQueueRepository.pushUserStatusChange(user, status); auditService.auditLogout(userId); } workQueueRepository.pushSessionExpiration(userId, event.getSession().getId()); } catch (Exception ex) { LOGGER.error("exception while unbinding user session for userId:%s", userId, ex); } } }