Spring Boot项目中解决跨域的三种方案
1、在目标方法上添加@CrossOrigin注解
“`
@RequestMapping("/list")
@CrossOrigin
public List<Book> list() {
return this.bookService.list();
}
“`
优点:可以精确到目标方法
缺点:需要为每个方法都添加注解
2、添加CORS过滤器
“`
package cn.itinfor.configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@Configuration//配置类
public class CorsConfig {
@Bean
public CorsFilter CorsFilter() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*");//允许哪些域
corsConfiguration.addAllowedHeader("*");//允许哪些请求头
corsConfiguration.addAllowedMethod("*");//允许哪些请求方法,如:GET、PUT等
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", corsConfiguration);
return new CorsFilter(source);
}
}
“`
3、实现WebMvcConfigurer接口,重写addCorsMappings方法
“`
package cn.itinfor.configuration;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class CordConfiguration implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOriginPatterns("*")
.allowedMethods("GET", "POST", "PUT", "DELETE", "HEAD", "OPTION")
.allowCredentials(true)//是否允许携带cookie
.maxAge(3600)//预检请求的有效期,单位为秒,在有效期内不再进行检测
.allowedHeaders("*");
}
}
“`
三种方法需单独使用,2、3都使用的情况下,若想其中一个不生效,直接注释掉”@Configuration”即可