package com.mossle.security.client; import java.util.Map; import com.mossle.security.api.MethodSourceFetcher; import com.mossle.security.api.UrlSourceFetcher; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.security.access.method.DelegatingMethodSecurityMetadataSource; import org.springframework.security.web.access.intercept.FilterSecurityInterceptor; import org.springframework.util.Assert; public class ResourceDetailsMonitor implements InitializingBean { private static Logger logger = LoggerFactory .getLogger(ResourceDetailsMonitor.class); private UrlSourceFetcher urlSourceFetcher; private MethodSourceFetcher methodSourceFetcher; private DelegatingMethodSecurityMetadataSource delegatingMethodSecurityMetadataSource; private FilterSecurityInterceptor filterSecurityInterceptor; private UrlResourcePopulator urlResourcePopulator = new UrlResourcePopulator(); private MethodResourcePopulator methodResourcePopulator = new MethodResourcePopulator(); private boolean debug; public void afterPropertiesSet() { Assert.notNull(urlSourceFetcher); Assert.notNull(methodSourceFetcher); Assert.notNull(filterSecurityInterceptor); Assert.notNull(delegatingMethodSecurityMetadataSource); refresh(); } public void refresh() { if (debug) { logger.info("debug mode, skip refresh"); return; } logger.info("execute refresh"); Map<String, String> urlResourceMap = urlSourceFetcher.getSource(null); urlResourcePopulator.execute(filterSecurityInterceptor, urlResourceMap); Map<String, String> methodResourceMap = methodSourceFetcher .getSource(null); methodResourcePopulator.execute(delegatingMethodSecurityMetadataSource, methodResourceMap); } // ~ ====================================================================== public void setUrlSourceFetcher(UrlSourceFetcher urlSourceFetcher) { this.urlSourceFetcher = urlSourceFetcher; } public void setMethodSourceFetcher(MethodSourceFetcher methodSourceFetcher) { this.methodSourceFetcher = methodSourceFetcher; } public void setDelegatingMethodSecurityMetadataSource( DelegatingMethodSecurityMetadataSource delegatingMethodSecurityMetadataSource) { this.delegatingMethodSecurityMetadataSource = delegatingMethodSecurityMetadataSource; } public void setFilterSecurityInterceptor( FilterSecurityInterceptor filterSecurityInterceptor) { this.filterSecurityInterceptor = filterSecurityInterceptor; } public void setDebug(boolean debug) { this.debug = debug; } }