diff --git a/src/main/java/org/nrg/xnat/configuration/SchedulerConfig.java b/src/main/java/org/nrg/xnat/configuration/SchedulerConfig.java index 806152a665004db677cdcb429bd9929a698c60d7..7c6ed90076fae386f0e876e01bd8257e00aad75d 100644 --- a/src/main/java/org/nrg/xnat/configuration/SchedulerConfig.java +++ b/src/main/java/org/nrg/xnat/configuration/SchedulerConfig.java @@ -96,6 +96,7 @@ public class SchedulerConfig implements SchedulingConfigurer { XDAT.getContextService().getBean(NrgEventService.class).triggerEvent(new PreferenceEvent("maxFailedLoginsLockoutDuration", String.valueOf(XDAT.getSiteConfigPreferences().getMaxFailedLoginsLockoutDuration()))); XDAT.getContextService().getBean(NrgEventService.class).triggerEvent(new PreferenceEvent("emailPrefix", String.valueOf(XDAT.getNotificationsPreferences().getEmailPrefix()))); XDAT.getContextService().getBean(NrgEventService.class).triggerEvent(new PreferenceEvent("host", String.valueOf(XDAT.getNotificationsPreferences().getHostname()))); + XDAT.getContextService().getBean(NrgEventService.class).triggerEvent(new PreferenceEvent("requireLogin", String.valueOf(XDAT.getSiteConfigPreferences().getRequireLogin()))); for (final TriggerTask triggerTask : _triggerTasks) { taskRegistrar.addTriggerTask(triggerTask); } diff --git a/src/main/java/org/nrg/xnat/event/listeners/methods/UpdateSecurityFilterHandlerMethod.java b/src/main/java/org/nrg/xnat/event/listeners/methods/UpdateSecurityFilterHandlerMethod.java new file mode 100644 index 0000000000000000000000000000000000000000..59310bf1df99114f288813cf62078cd6293fda5b --- /dev/null +++ b/src/main/java/org/nrg/xnat/event/listeners/methods/UpdateSecurityFilterHandlerMethod.java @@ -0,0 +1,54 @@ +package org.nrg.xnat.event.listeners.methods; + +import com.google.common.collect.ImmutableList; +import org.nrg.xdat.XDAT; +import org.nrg.xnat.security.FilterSecurityInterceptorBeanPostProcessor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.security.web.access.intercept.FilterSecurityInterceptor; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +@Component +public class UpdateSecurityFilterHandlerMethod extends AbstractSiteConfigPreferenceHandlerMethod { + @Override + public List<String> getHandledPreferences() { + return PREFERENCES; + } + + @Override + public void handlePreferences(final Map<String, String> values) { + if (!Collections.disjoint(PREFERENCES, values.keySet())) { + updateSecurityFilter(); + } + } + + @Override + public void handlePreference(final String preference, final String value) { + if(PREFERENCES.contains(preference)){ + updateSecurityFilter(); + } + } + + private void updateSecurityFilter(){ + FilterSecurityInterceptor interceptor = XDAT.getContextService().getBean(FilterSecurityInterceptor.class); + FilterSecurityInterceptorBeanPostProcessor postProcessor = XDAT.getContextService().getBean(FilterSecurityInterceptorBeanPostProcessor.class); + if(interceptor!=null && postProcessor!=null){ + interceptor.setSecurityMetadataSource(postProcessor.getMetadataSource(XDAT.getSiteConfigPreferences().getRequireLogin())); + } + } + + private static final Logger _log = LoggerFactory.getLogger(UpdateSecurityFilterHandlerMethod.class); + private static final List<String> PREFERENCES = ImmutableList.copyOf(Arrays.asList("requireLogin")); + + @Autowired + @Lazy + private JdbcTemplate _template; +}