Good morning.
I have been fighting with this issue for the past two days so I decided to post a question about it.
Basically I have a Spring Boot project which executes basic CRUD operations through a React JS front-end. Everything seemed to work fine until I added Spring Security to the project. Since then whenever I make a request (using axios) from the front-end I get the following error:
Access to XMLHttpRequest at 'http://localhost:8080/calciatore/list' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Before implementing Spring Security everything worked perfectly just using @CrossOrigin(origins = "*")
in my back-end controllers, but now I always get that error even if the URL is configured not to be protected through login by Spring Security.
In the meanwhile, I have no problems making any request (POST for login or GET for data fetching) from Postman.
I tried looking for a solution all around the internet but still didn't find one.
If you need me to show a portion of code just ask.
Thanks in advance.
CodePudding user response:
Try using the global CORS config as shown in below code to allow CORS for all endpoints.
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Component
public class CorsConfig {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry
.addMapping("/**")
.allowedMethods(CorsConfiguration.ALL)
.allowedHeaders(CorsConfiguration.ALL)
.allowedOriginPatterns(CorsConfiguration.ALL);
}
};
}
}
Since spring boot 2.4 you are supposed to use allowedOriginPatterns
instead of allowedOrigins
. Also you cannot use wildcard '*' along with credentials : true