SpringBoot解决跨域问题
跨域不可访问,指的是基于浏览器同源规则的一种现实问题,同源指的是:相同协议,相同域名,相同端口,如果不是则属于跨域
@CrossOrigin
可以通过@CrossOrigin注解实现跨域
@CrossOrigin(origins = "http://domain1.com")
@RestController
public class TestController {
@GetMapping("/test")
public String test() {
return "hello";
}
}
过滤器CorsFilter
这种方式更加灵活,会应用到所有请求上
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("http://domain1.com");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
}
WebMvcConfigurer配置
在WebMvcConfigurer接口的addCorsMappings()方法中实现,也比较常见
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://domain1.com")
.allowedMethods("GET", "POST", "PUT", "OPTIONS", "DELETE", "PATCH")
.allowedHeaders("*")
.allowCredentials(true);
}
}