通过WebMvcConfigurer接口的addCorsMappings方法进行全局配置:
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") // 允许所有路径的跨域请求
.allowedOrigins("http://192.168.3.23:9000") // 允许来自http://192.168.3.23:9000的请求
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS", "HEAD") // 允许的HTTP方法
.allowCredentials(true) // 是否允许发送Cookie
.maxAge(3600); // 预检请求的缓存时间(秒)
}
}
通过定义一个CorsFilter Bean进行配置:
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("http://192.168.3.23:9000"); // 允许来自http://192.168.3.23:9000的请求
config.addAllowedHeader("*");
config.addAllowedMethod("OPTIONS", "GET", "POST", "PUT", "DELETE", "PATCH");
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
这两种方式虽然都能实现跨域配置,但它们的应用场景和特点有所不同:
通过WebMvcConfigurer接口的addCorsMappings方法进行全局配置:这种方式适用于需要对多个HandlerMapping进行统一CORS配置的场景。它的作用范围是全局的,可以影响到所有的内置配置的HandlerMapping。
通过定义一个CorsFilter Bean进行配置:这种方式更为灵活,它是一个完全独立的Filter,与其它配置不冲突也没有关联,最终委托给CorsProcessor来完成。这种方式适合需要对CORS进行更细粒度控制的场景,例如根据不同的URL模式应用不同的CORS配置。
总的来说,如果你的应用需要统一的CORS策略,且不涉及复杂的条件判断,使用WebMvcConfigurer的方式会更加简洁。而如果你的应用有更复杂的CORS需求,或者需要在运行时动态调整CORS策略,那么定义一个CorsFilter Bean可能会更加合适。
ps:如果是前端的websocket出现跨域异常,需要在WebSocketConfig中的registerStompEndpoints添加setAllowedOriginPatterns(“*”)