From b99816229e44e2b8ff8c0a281b812c28f4f9cb53 Mon Sep 17 00:00:00 2001 From: haint Date: Thu, 25 Apr 2013 14:12:50 +0700 Subject: [PATCH] GTNPORTAL-2961: Token Service: Configurable the delay time to run clear expired token Conflicts: component/web/security/src/test/resources/conf/tokenservice-configuration.xml --- .../security/AbstractTokenService.java | 39 ++++++++++++------- .../conf/tokenservice-configuration.xml | 16 ++++++++ .../gadget/TestGadgetTokenInfoService.java | 4 +- .../gadget-tokenservice-configuration.xml | 4 ++ 4 files changed, 46 insertions(+), 17 deletions(-) diff --git a/component/web/security/src/main/java/org/exoplatform/web/security/security/AbstractTokenService.java b/component/web/security/src/main/java/org/exoplatform/web/security/security/AbstractTokenService.java index 8de076c0a..8056d19b1 100644 --- a/component/web/security/src/main/java/org/exoplatform/web/security/security/AbstractTokenService.java +++ b/component/web/security/src/main/java/org/exoplatform/web/security/security/AbstractTokenService.java @@ -27,6 +27,7 @@ import org.exoplatform.container.PortalContainer; import org.exoplatform.container.xml.InitParams; +import org.exoplatform.container.xml.ValueParam; import org.exoplatform.management.annotations.Impact; import org.exoplatform.management.annotations.ImpactType; import org.exoplatform.management.annotations.Managed; @@ -61,7 +62,7 @@ public abstract class AbstractTokenService implements Starta protected static final String SERVICE_CONFIG = "service.configuration"; - protected static final int DELAY_TIME = 600; + protected static final String CLEANUP_PERIOD_TIME = "cleanup.period.time"; /** * See {@link #tokenByteLength}. 8 bytes (64 bits) would be enough, but we want to get padding-less Byte64 representation, @@ -80,6 +81,8 @@ public abstract class AbstractTokenService implements Starta protected long validityMillis; + protected int delay_time = 600; + private ScheduledExecutorService executor; @SuppressWarnings("unchecked") @@ -89,26 +92,32 @@ public AbstractTokenService(InitParams initParams) throws TokenServiceInitializa long configValue = new Long(params.get(1)); this.validityMillis = TimeoutEnum.valueOf(params.get(2)).toMilisecond(configValue); this.tokenByteLength = DEFAULT_TOKEN_BYTE_LENGTH; + ValueParam delayParam = initParams.getValueParam(CLEANUP_PERIOD_TIME); + if(delayParam != null) { + delay_time = Integer.parseInt(delayParam.getValue()); + } } public void start() { - - // start a thread, garbage expired cookie token every [DELAY_TIME] - executor = Executors.newSingleThreadScheduledExecutor(); - executor.scheduleWithFixedDelay(new Runnable() { - public void run() { - try { - AbstractTokenService.this.cleanExpiredTokens(); - } catch (Throwable t) { - log.warn("Failed to clean expired tokens", t); + if(delay_time > 0) { + // start a thread, garbage expired cookie token every [DELAY_TIME] + executor = Executors.newSingleThreadScheduledExecutor(); + executor.scheduleWithFixedDelay(new Runnable() { + public void run() { + try { + AbstractTokenService.this.cleanExpiredTokens(); + } catch (Throwable t) { + log.warn("Failed to clean expired tokens", t); + } } - } - }, 0, DELAY_TIME, TimeUnit.SECONDS); - + }, 0, delay_time, TimeUnit.SECONDS); + } } public void stop() { - executor.shutdown(); + if(executor != null) { + executor.shutdown(); + } } public static > T getInstance(Class classType) { @@ -160,7 +169,7 @@ public long getValidityTime() { @Managed @ManagedDescription("The expiration daemon period time in seconds") public long getPeriodTime() { - return DELAY_TIME; + return delay_time; } @Managed diff --git a/component/web/security/src/test/resources/conf/tokenservice-configuration.xml b/component/web/security/src/test/resources/conf/tokenservice-configuration.xml index a4dd8d00f..3289a8523 100644 --- a/component/web/security/src/test/resources/conf/tokenservice-configuration.xml +++ b/component/web/security/src/test/resources/conf/tokenservice-configuration.xml @@ -44,6 +44,10 @@ gatein.conf.dir jar:/conf + + cleanup.period.time + 0 + service.configuration jcr-token @@ -63,6 +67,10 @@ gatein.conf.dir jar:/conf + + cleanup.period.time + 0 + service.configuration jcr-token @@ -86,6 +94,10 @@ gatein.conf.dir jar:/conf + + cleanup.period.time + 0 + service.configuration jcr-token @@ -101,6 +113,10 @@ org.exoplatform.web.security.security.TransientTokenService org.exoplatform.web.security.security.TransientTokenService + + cleanup.period.time + 0 + service.configuration memory-token diff --git a/gadgets/core/src/test/java/org/exoplatform/portal/gadget/TestGadgetTokenInfoService.java b/gadgets/core/src/test/java/org/exoplatform/portal/gadget/TestGadgetTokenInfoService.java index 99427616f..1faf03787 100644 --- a/gadgets/core/src/test/java/org/exoplatform/portal/gadget/TestGadgetTokenInfoService.java +++ b/gadgets/core/src/test/java/org/exoplatform/portal/gadget/TestGadgetTokenInfoService.java @@ -137,14 +137,14 @@ public void testCleanExpiredTokens() throws Exception { tokenIndex.setUserId("root" + i); service.createToken(tokenIndex, tokenInfo); - assertEquals(service.size(), 2); + assertEquals(2, service.size()); Thread.sleep(1500); service.cleanExpiredTokens(); /* * one of the two tokens should have been cleaned at this point, i.e. cca 2.5 seconds after the creation of the first * one */ - assertEquals(service.size(), 1); + assertEquals(1, service.size()); clearAllTokens(); } diff --git a/gadgets/core/src/test/resources/conf/gadget-tokenservice-configuration.xml b/gadgets/core/src/test/resources/conf/gadget-tokenservice-configuration.xml index 7b1075815..720b3e5b9 100644 --- a/gadgets/core/src/test/resources/conf/gadget-tokenservice-configuration.xml +++ b/gadgets/core/src/test/resources/conf/gadget-tokenservice-configuration.xml @@ -33,6 +33,10 @@ org.exoplatform.portal.gadget.core.GadgetTokenInfoService + + cleanup.period.time + 0 + service.configuration gadget-token