package org.transgalactica.management.rest; import javax.servlet.Filter; import javax.servlet.FilterRegistration; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRegistration; import org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter; import org.springframework.web.WebApplicationInitializer; import org.springframework.web.context.ContextLoaderListener; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.filter.CharacterEncodingFilter; import org.springframework.web.filter.DelegatingFilterProxy; import org.springframework.web.filter.HiddenHttpMethodFilter; import org.springframework.web.filter.RequestContextFilter; import org.springframework.web.servlet.DispatcherServlet; import org.transgalactica.management.rest.context.AppConfig; import org.transgalactica.management.rest.context.mvc.WebMvcConfig; public class Initializer implements WebApplicationInitializer { public void onStartup(ServletContext container) throws ServletException { // Create filters FilterRegistration.Dynamic charEncodingfilter = container.addFilter("characterEncodingFilter", CharacterEncodingFilter.class); charEncodingfilter.setInitParameter("encoding", "UTF-8"); charEncodingfilter.setInitParameter("forceEncoding", "true"); charEncodingfilter.addMappingForUrlPatterns(null, false, "/*"); registerFilter(container, "simpleCORSFilter", SimpleCORSFilter.class); registerFilter(container, "localizationFilter", RequestContextFilter.class); registerFilter(container, "hiddenHttpMethodFilter", HiddenHttpMethodFilter.class); registerFilter(container, "springSecurityFilterChain", new DelegatingFilterProxy("springSecurityFilterChain")); registerFilter(container, "openEntityManagerInViewFilter", OpenEntityManagerInViewFilter.class); // Create the 'root' Spring application context AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); rootContext.setId("root"); rootContext.getEnvironment().setActiveProfiles("embedded"); rootContext.register(AppConfig.class); container.addListener(new ContextLoaderListener(rootContext)); // Create the dispatcher servlet's Spring application context AnnotationConfigWebApplicationContext mvcContext = new AnnotationConfigWebApplicationContext(); mvcContext.setId("mvc"); mvcContext.register(WebMvcConfig.class); ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(mvcContext)); dispatcher.setLoadOnStartup(1); dispatcher.addMapping("/"); } private void registerFilter(ServletContext container, String name, Filter filter) { container.addFilter(name, filter).addMappingForUrlPatterns(null, false, "/*"); } private void registerFilter(ServletContext container, String name, Class<? extends Filter> filterClazz) { container.addFilter(name, filterClazz).addMappingForUrlPatterns(null, false, "/*"); } }