/* (c) 2016 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.security.oauth2; import java.util.logging.Logger; import org.geoserver.config.util.XStreamPersister; import org.geoserver.security.GeoServerSecurityManager; import org.geoserver.security.SecurityManagerListener; import org.geoserver.security.config.SecurityNamedServiceConfig; import org.geoserver.security.filter.AbstractFilterProvider; import org.geoserver.security.filter.GeoServerSecurityFilter; import org.geoserver.security.validation.SecurityConfigValidator; import org.geotools.util.logging.Logging; import org.springframework.context.ApplicationContext; import org.springframework.security.oauth2.client.OAuth2RestTemplate; import org.springframework.security.oauth2.provider.token.RemoteTokenServices; /** * Security provider for OAuth2 * * @author Alessio Fabiani, GeoSolutions */ public abstract class GeoServerOAuthAuthenticationProvider extends AbstractFilterProvider implements SecurityManagerListener { static Logger LOGGER = Logging.getLogger("org.geoserver.security.outh2"); RemoteTokenServices tokenServices; GeoServerOAuth2SecurityConfiguration oauth2SecurityConfiguration; OAuth2RestTemplate geoServerOauth2RestTemplate; private ApplicationContext context; public GeoServerOAuthAuthenticationProvider( GeoServerSecurityManager securityManager, String tokenServices, String oauth2SecurityConfiguration, String geoServerOauth2RestTemplate) { assert securityManager != null; context = securityManager.getApplicationContext(); assert context != null; this.tokenServices = (RemoteTokenServices) context.getBean(tokenServices); this.oauth2SecurityConfiguration = (GeoServerOAuth2SecurityConfiguration) context.getBean(oauth2SecurityConfiguration); this.geoServerOauth2RestTemplate = (OAuth2RestTemplate) context.getBean(geoServerOauth2RestTemplate); securityManager.addListener(this); } @Override public abstract void configure(XStreamPersister xp); @Override public abstract Class<? extends GeoServerSecurityFilter> getFilterClass(); @Override public abstract GeoServerSecurityFilter createFilter(SecurityNamedServiceConfig config); @Override public SecurityConfigValidator createConfigurationValidator( GeoServerSecurityManager securityManager) { return new OAuth2FilterConfigValidator(securityManager); } }