From d7a35d13cd691e6821f774b624e4203a404e67d9 Mon Sep 17 00:00:00 2001
From: Roberto Sánchez <roberto.sanchez@curisit.net>
Date: Tue, 21 Jan 2014 10:16:13 +0000
Subject: [PATCH] #396 feature - Added authorization management

---
 securis/src/main/java/net/curisit/securis/utils/CacheTTL.java |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/securis/src/main/java/net/curisit/securis/utils/CacheTTL.java b/securis/src/main/java/net/curisit/securis/utils/CacheTTL.java
index 51a59e4..6561517 100644
--- a/securis/src/main/java/net/curisit/securis/utils/CacheTTL.java
+++ b/securis/src/main/java/net/curisit/securis/utils/CacheTTL.java
@@ -1,7 +1,9 @@
 package net.curisit.securis.utils;
 
+import java.util.ArrayList;
 import java.util.Date;
-import java.util.Hashtable;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import javax.inject.Inject;
@@ -25,7 +27,7 @@
 	 */
 	private static int DEFAULT_CACHE_DURATION = 24 * 60 * 60;
 
-	private Map<String, CachedObject> data = new Hashtable<>();
+	private Map<String, CachedObject> data = new HashMap<>();
 
 	private Thread cleaningThread = null;
 
@@ -46,12 +48,17 @@
 					}
 					// log.info("Cheking expired objects " + new Date());
 					Date now = new Date();
+					List<String> keysToRemove = new ArrayList<>();
 					for (String key : CacheTTL.this.data.keySet()) {
 						CachedObject co = CacheTTL.this.data.get(key);
 						if (now.after(co.getExpireAt())) {
-							CacheTTL.this.data.remove(key);
+							keysToRemove.add(key);
 						}
 					}
+					for (String key : keysToRemove) {
+						// If we try to remove directly in the previous loop an exception is thrown java.util.ConcurrentModificationException
+						CacheTTL.this.data.remove(key);
+					}
 				}
 			}
 		});

--
Gitblit v1.3.2