package com.bitmonlab.osiris.api.configuration; import java.util.ArrayList; import java.util.List; import java.util.Set; import javax.ws.rs.ext.ExceptionMapper; import org.eclipse.jetty.server.session.SessionHandler; import com.bitmonlab.osiris.api.security.dropwizard.DropwizardAuthenticator; import com.bitmonlab.osiris.api.security.dropwizard.SpringSecurityCredentials; import com.bitmonlab.osiris.api.security.dropwizard.SpringSecurityProvider; import com.bitmonlab.osiris.commons.model.security.BasicAuth; import com.bitmonlab.osiris.core.errorhandler.RestErrorsHandler; import com.github.pnayak.dropwizard.spring.AutoWiredService; import com.google.common.cache.CacheBuilderSpec; import com.sun.jersey.api.core.ResourceConfig; import com.yammer.dropwizard.auth.CachingAuthenticator; import com.yammer.dropwizard.config.Bootstrap; import com.yammer.dropwizard.config.Environment; public class ResourceSetup extends AutoWiredService<OsirisConfiguration>{ public ResourceSetup() { super("ResourceSetup", "com.bitmonlab.osiris.api"); } public static void main(String[] args) throws Exception { new ResourceSetup().run(args); } public void initialize(Bootstrap<OsirisConfiguration> bootstrap) { bootstrap.setName("ResourceSetup"); } public void run(OsirisConfiguration configuration, Environment environment) throws Exception { super.runWithAppContext(configuration,environment,appContext); appContext.registerShutdownHook(); appContext.scan("com.bitmonlab.osiris.api"); // Remove all of Dropwizard's custom ExceptionMappers ResourceConfig jrConfig = environment.getJerseyResourceConfig(); Set<Object> dwSingletons = jrConfig.getSingletons(); List<Object> singletonsToRemove = new ArrayList<Object>(); for (Object s : dwSingletons) { if (s instanceof ExceptionMapper && s.getClass().getName().startsWith("com.yammer.dropwizard.jersey.")) { singletonsToRemove.add(s); } } for (Object s : singletonsToRemove) { jrConfig.getSingletons().remove(s); } environment.addProvider(new RestErrorsHandler()); // Allowing cross-origin environment.addFilter(CORSFilter.class, "/*"); //Security config environment.setSessionHandler(new SessionHandler()); DropwizardAuthenticator authenticator = appContext.getBean(DropwizardAuthenticator.class); CachingAuthenticator<SpringSecurityCredentials, BasicAuth> cachingAuthenticator = CachingAuthenticator.wrap(authenticator, CacheBuilderSpec.parse(configuration.getAuthenticationCachePolicy())); appContext.getBeanFactory().registerSingleton(DropwizardAuthenticator.class.getName(), cachingAuthenticator); new SpringSecurityProvider(appContext).registerProvider(environment); } }