slnowak
slnowak

Reputation: 1919

Swagger + spring-boot = CORS issue?

I'm trying to set up swagger in my project.

I have following SwaggerConfiguration class:

@EnableSwagger
@Configuration
@ComponentScan(basePackages = {"my.package"})
public class SwaggerConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler(
                SwaggerSpringMvcUi.WEB_JAR_RESOURCE_PATTERNS)
                .addResourceLocations(
                        SwaggerSpringMvcUi.WEB_JAR_RESOURCE_LOCATION)
                .setCachePeriod(0);
    }

    @Bean
    public InternalResourceViewResolver getInternalResourceViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix(SwaggerSpringMvcUi.WEB_JAR_VIEW_RESOLVER_PREFIX);
        resolver.setSuffix(SwaggerSpringMvcUi.WEB_JAR_VIEW_RESOLVER_SUFFIX);
        return resolver;
    }

    @Override
    public void configureDefaultServletHandling(
            DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

}

Unfortunately, I'm getting Can't read from server. It may not have the appropriate access-control-origin settings.

So after a quick research, I found out I need to add CORSFilter to overcome this:

@Component
public class SimpleCORSFilter implements Filter {

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
        chain.doFilter(req, res);
    }

    public void init(FilterConfig filterConfig) {}

    public void destroy() {}

}

I checked with CURL - header is modified properly, but Swagger still doesn't work (same error message as previous).

Any ideas?

Upvotes: 3

Views: 8681

Answers (1)

kinjelom
kinjelom

Reputation: 6450

Please take a look at the last release Spring Boot 1.3.M1: https://spring.io/blog/2015/06/12/spring-boot-1-3-0-m1-available-now

The recently released Spring Framework 4.2 RC1 provides first class support for CORS out-of-the-box, giving you an easier and more powerful way to configure it than typical filter based solutions.

... more info: https://spring.io/blog/2015/06/08/cors-support-in-spring-framework

Upvotes: 1

Related Questions