diff --git a/src/main/java/org/codiki/core/security/TokenService.java b/src/main/java/org/codiki/core/security/TokenService.java index 2b24b85..ba95b23 100644 --- a/src/main/java/org/codiki/core/security/TokenService.java +++ b/src/main/java/org/codiki/core/security/TokenService.java @@ -1,5 +1,6 @@ package org.codiki.core.security; +import java.util.Date; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -16,6 +17,12 @@ public class TokenService { private static final Map connectedUsers; private static final String HEADER_TOKEN = "token"; + + private static final long INTERVAL_USER_CLEANING = 5; + + private static final long INTERVAL_USER_CLEANING_VAL = INTERVAL_USER_CLEANING * 60 * 1000; + + private Date lastUsersCleaning; /** * Class constructor @@ -44,7 +51,12 @@ public class TokenService { } // clear all the expired sessions - clearExpiredUsers(); + final Date now = new Date(); + if(lastUsersCleaning == null || now.getTime() - lastUsersCleaning.getTime() >= INTERVAL_USER_CLEANING_VAL) { + new Thread(this::clearExpiredUsers).start(); + lastUsersCleaning = now; + } + return result; } @@ -53,7 +65,6 @@ public class TokenService { * Remove from the connected users map all the elements which their token is * expired. */ - @SuppressWarnings("unlikely-arg-type") private void clearExpiredUsers() { synchronized (this) { List usersToRemove = new LinkedList<>(); @@ -62,7 +73,7 @@ public class TokenService { usersToRemove.add(user.getValue()); } }); - usersToRemove.stream().forEach(connectedUsers::remove); + usersToRemove.stream().map(User::getKey).forEach(connectedUsers::remove); } }