From d152804fe3b05f6fda620db40e976fdc2287c768 Mon Sep 17 00:00:00 2001 From: Mike McKay <mfmckay@wustl.edu> Date: Thu, 8 Sep 2016 15:31:36 -0500 Subject: [PATCH] XNAT-4424 Fixed timing of alias token expiration by doing everything through Hibernate instead of direct database queries. --- .../AliasTokenPreferenceHandlerMethod.java | 8 +++-- .../alias/ClearExpiredAliasTokens.java | 29 +++++++++---------- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/nrg/xnat/event/listeners/methods/AliasTokenPreferenceHandlerMethod.java b/src/main/java/org/nrg/xnat/event/listeners/methods/AliasTokenPreferenceHandlerMethod.java index 77436980..1a3192fc 100644 --- a/src/main/java/org/nrg/xnat/event/listeners/methods/AliasTokenPreferenceHandlerMethod.java +++ b/src/main/java/org/nrg/xnat/event/listeners/methods/AliasTokenPreferenceHandlerMethod.java @@ -2,6 +2,7 @@ package org.nrg.xnat.event.listeners.methods; import com.google.common.collect.ImmutableList; import org.nrg.xdat.preferences.SiteConfigPreferences; +import org.nrg.xdat.services.AliasTokenService; import org.nrg.xnat.security.alias.ClearExpiredAliasTokens; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -17,7 +18,8 @@ import java.util.concurrent.ScheduledFuture; @Component public class AliasTokenPreferenceHandlerMethod extends AbstractSiteConfigPreferenceHandlerMethod { @Autowired - public AliasTokenPreferenceHandlerMethod(final SiteConfigPreferences preferences, final JdbcTemplate template, final ThreadPoolTaskScheduler scheduler) { + public AliasTokenPreferenceHandlerMethod(final AliasTokenService service, final SiteConfigPreferences preferences, final JdbcTemplate template, final ThreadPoolTaskScheduler scheduler) { + _service=service; _preferences = preferences; _template = template; _scheduler = scheduler; @@ -49,7 +51,7 @@ public class AliasTokenPreferenceHandlerMethod extends AbstractSiteConfigPrefere future.cancel(false); } _timeouts.clear(); - _timeouts.add(_scheduler.schedule(new ClearExpiredAliasTokens(_template), new CronTrigger(_preferences.getAliasTokenTimeoutSchedule()))); + _timeouts.add(_scheduler.schedule(new ClearExpiredAliasTokens(_service, _preferences, _template), new CronTrigger(_preferences.getAliasTokenTimeoutSchedule()))); } catch (Exception e1) { _log.error("", e1); } @@ -57,7 +59,7 @@ public class AliasTokenPreferenceHandlerMethod extends AbstractSiteConfigPrefere private static final Logger _log = LoggerFactory.getLogger(AliasTokenPreferenceHandlerMethod.class); private static final List<String> PREFERENCES = ImmutableList.copyOf(Arrays.asList("aliasTokenTimeout", "aliasTokenTimeoutSchedule")); - + private final AliasTokenService _service; private final SiteConfigPreferences _preferences; private final JdbcTemplate _template; private final ThreadPoolTaskScheduler _scheduler; diff --git a/src/main/java/org/nrg/xnat/security/alias/ClearExpiredAliasTokens.java b/src/main/java/org/nrg/xnat/security/alias/ClearExpiredAliasTokens.java index cf3bc7ab..eb5b64fa 100644 --- a/src/main/java/org/nrg/xnat/security/alias/ClearExpiredAliasTokens.java +++ b/src/main/java/org/nrg/xnat/security/alias/ClearExpiredAliasTokens.java @@ -10,20 +10,22 @@ */ package org.nrg.xnat.security.alias; -import org.nrg.xdat.XDAT; +import org.hibernate.SessionFactory; +import org.nrg.xdat.preferences.SiteConfigPreferences; +import org.nrg.xdat.services.AliasTokenService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.jdbc.core.JdbcTemplate; -import java.util.Arrays; -import java.util.List; +import javax.inject.Inject; public class ClearExpiredAliasTokens implements Runnable { - public ClearExpiredAliasTokens(final JdbcTemplate template) { + public ClearExpiredAliasTokens(final AliasTokenService aliasTokenService, final SiteConfigPreferences preferences, final JdbcTemplate template) { if (_log.isDebugEnabled()) { _log.debug("Initializing the alias token sweeper job"); } - + _service = aliasTokenService; + _preferences=preferences; _template = template; } @@ -34,19 +36,16 @@ public class ClearExpiredAliasTokens implements Runnable { if (_log.isDebugEnabled()) { _log.debug("Executing alias token sweep function"); } - for (final String format : ALIAS_TOKEN_QUERIES) { - final String query = String.format(format, XDAT.getSiteConfigPreferences().getAliasTokenTimeout()); - if (_log.isDebugEnabled()) { - _log.debug("Executing alias token sweep query: " + query); - } - _template.execute(query); - } + _service.invalidateExpiredTokens(_preferences.getAliasTokenTimeout()); } + private final SiteConfigPreferences _preferences; + + @Inject + private SessionFactory _sessionFactory; + + private final AliasTokenService _service; private static final Logger _log = LoggerFactory.getLogger(ClearExpiredAliasTokens.class); - private static final String QUERY_DELETE_TOKEN_IP_ADDRESSES = "DELETE FROM xhbm_alias_token_validipaddresses WHERE alias_token in (SELECT id FROM xhbm_alias_token WHERE created < NOW() - INTERVAL '%s')"; - private static final String QUERY_DELETE_ALIAS_TOKENS = "DELETE FROM xhbm_alias_token WHERE created < NOW() - INTERVAL '%s'"; - private static final List<String> ALIAS_TOKEN_QUERIES = Arrays.asList(QUERY_DELETE_TOKEN_IP_ADDRESSES, QUERY_DELETE_ALIAS_TOKENS); private final JdbcTemplate _template; } -- GitLab