1
votes

I have my server running on localhost:8080 ( spring boot app ) and my frontend on localhost:3000 ( angular app ). The problem is that I want to make a request from frontend to my backend server. I am familiar with cors, but it doesn't work form me. I added this to my server :

    @Bean
WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurerAdapter() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**").allowedOrigins("http://localhost:3000");
        }
    };
}

, but I still get

XMLHttpRequest cannot load http://localhost:8080/cars. The request was redirected to 'http://localhost:8080/login', which is disallowed for cross-origin requests that require preflight.

What's wrong ?

1

1 Answers

0
votes

According to the official blog article CORS support in Spring Framework, if you have enabled Spring Security you have to use filter based CORS support.

@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;
    }
}