其实跨域问题的产生是在前后端分离的情况下,分离部署产生的浏览器自我保护行为,前端也可以解决跨域问题。以下仅提供了三种后端解决方案
方式一:实现WebMvcConfigurer接口,重写addCorsMappings()方法
@EnableWebMvc
@Configuration
public class CORSConfig implements WebMvcConfigurer {
//配置
// @Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/*")
//是否发送Cookie
.allowCredentials(true)
.allowedOrigins("*")
.allowedHeaders("*")
.allowedMethods("*");
}
}
方式二:返回新的CorsFilter
@Configuration
public class CorsFilterConfig {
@Bean
public CorsFilter corsFilter(){
//1. 添加 CORS配置信息
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedHeader("*"); //放行哪些原始请求头部信息
corsConfiguration.addAllowedMethod("*"); //放行哪些请求方式
corsConfiguration.addAllowedOrigin("*"); //放行哪些原始域
corsConfiguration.addExposedHeader("*"); //暴露哪些头部信息
//2. 添加映射路径
UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
corsConfigurationSource.registerCorsConfiguration("/**",corsConfiguration);
//3. 返回新的CorsFilter
return new CorsFilter(corsConfigurationSource);
}
}
方式三:使用注解 (局部跨域)
①在控制器(类上)上使用注解 @CrossOrigin: 表示该类的所有方法允许跨域。
@RestController
@CrossOrigin(origins = "*")
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "Hello World!";
}
}
②在方法上使用注解 @CrossOrigin: 表示该方法允许跨域
@RestController
public class HelloController {
//@CrossOrigin(value = "http://localhost:8081") //指定具体ip允许跨域
@requestMapping("/hello")
@CrossOrigin(origins = "*")
public String hello() {
return "hello world";
}