Suvrajyoti Chatterjee
Suvrajyoti Chatterjee

Reputation: 107

Enabling CORS in Spring Secondary Servlet

I am registering a secondary servlet using Spring boot's ServletRegistrationBean

@Configuration
public class CxfServletRegister {   
@Bean
public ServletRegistrationBean getODataServletRegistrationBean() {
    ServletRegistrationBean odataServletRegistrationBean = new ServletRegistrationBean(new CXFNonSpringJaxrsServlet(), "/odata.svc/*");
    Map<String, String> initParameters = new HashMap<String, String>();
    initParameters.put("javax.ws.rs.Application", "org.apache.olingo.odata2.core.rest.app.ODataApplication");
    initParameters.put("org.apache.olingo.odata2.service.factory", "com.cce.utils.JPAServiceFactory");
    odataServletRegistrationBean.setInitParameters(initParameters);
    return odataServletRegistrationBean;
}
}

I am building an OData application using Apache Olingo. I want CORS to be enabled for my service. How do I enable CORS for this servlet?

PS I have tried the WebConfigurer bean from the Spring: Getting Started guides

@Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurerAdapter() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/greeting-javaconfig").allowedOrigins("*");
        }
    };
}

This doesn't work, probably because this is configuring spring web's default dispatcher servlet and not the additional servlet configured using the ServletRegistrationBean

Upvotes: 3

Views: 853

Answers (1)

crig
crig

Reputation: 879

I found a likely way to do it here: https://spring.io/blog/2015/06/08/cors-support-in-spring-framework

    @Configuration
    public class MyConfiguration {

    @Bean
    public FilterRegistrationBean corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedOrigin("http://domain1.com");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/**", config);
        FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
        bean.setOrder(0);
        return bean;
       }
    }

Upvotes: 3

Related Questions