SpringBoot2.0 跨域处理
1.原因
在前后端项目分离时,最先遇到的问题也许就是跨域
。
其他原因,不再赘述。
2.环境
①.spring-boot
:2.1.0.RELEASE
3.解决跨域的伪三种方式(本质一样)
一、Application.java直接配置Bean
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public CorsFilter corsFilter() {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
final CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.setMaxAge(18000L);
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
}
二、定义配置类
新建一个CorsConfig.java
(名字随意)
@Configuration
@EnableWebMvc
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
//是否允许证书 不再默认开启
.allowCredentials(true)
//设置允许的方法
.allowedMethods("*")
//跨域允许时间
.maxAge(3600);
}
}
三、添加@CrossOrigin
注解
在需要跨域的Controller类或方法名上添加@CrossOrigin
注解
其中@CrossOrigin中的2个参数:
origins : 允许访问的域列表。如(origins = "http://csdn.com")
maxAge:响应前缓存持续最大时间(秒)。如(maxAge = 600)
为什么叫伪呢?因为这不是全局解决方案。