Skip to content
Snippets Groups Projects
Commit d152804f authored by Mike McKay's avatar Mike McKay
Browse files

XNAT-4424 Fixed timing of alias token expiration by doing everything through...

XNAT-4424 Fixed timing of alias token expiration by doing everything through Hibernate instead of direct database queries.
parent b03f3b2b
Branches
No related tags found
No related merge requests found
......@@ -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;
......
......@@ -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;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment