SpringBoot 跨域配置
SrpingBoot 配置
WebMvcConfig WebMvc配置
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
/**
* CORS
*/
@Override
public void addCorsMappings(CorsRegistry registry) {
// 所有请求都允许跨域
// When allowCredentials is true, allowedOrigins cannot contain the special
// value "*"since that cannot be set on the "Access-Control-Allow-Origin"
// response header. To allow credentials to a set of origins, list them
// explicitly or consider using "allowedOriginPatterns" instead
registry.addMapping("/**").allowCredentials(true).allowedOriginPatterns("*").allowedMethods("*")
.allowedHeaders("*").maxAge(3600L);
}
}
FilterConfig 过滤器配置
@Configuration
public class FilterConfig {
// 第一种形式
@Bean
public FilterRegistrationBean<CorsFilter> corsFilter() {
// CORS配置信息
CorsConfiguration corsConfiguration = new CorsConfiguration();
// 允许的域 addAllowedOrigin 若为 * cookie无法使用,可使用 addAllowedOriginPattern 代替
// corsConfiguration.addAllowedOrigin("*");
// corsConfiguration.addAllowedOrigin("http://localhost:8080");
corsConfiguration.addAllowedOriginPattern("*");
// 是否发送Cookie信息
corsConfiguration.setAllowCredentials(true);
// 允许的请求方式
corsConfiguration.addAllowedMethod("*");
// corsConfiguration.addAllowedMethod("OPTIONS");
// corsConfiguration.addAllowedMethod("HEAD");
// corsConfiguration.addAllowedMethod("GET");
// corsConfiguration.addAllowedMethod("PUT");
// corsConfiguration.addAllowedMethod("POST");
// corsConfiguration.addAllowedMethod("DELETE");
// corsConfiguration.addAllowedMethod("PATCH");
corsConfiguration.setMaxAge(3600L);
// 允许的头信息
corsConfiguration.addAllowedHeader("*");
// 添加映射路径,拦截所有请求
UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
configSource.registerCorsConfiguration("/**", corsConfiguration);
return new FilterRegistrationBean<>(new CorsFilter(configSource));
}
// 第二种形式
// @Bean
// public CorsFilter corsFilter() {
// // CORS配置信息
// CorsConfiguration corsConfiguration = new CorsConfiguration();
// // 允许的域 addAllowedOrigin 若为 * cookie无法使用,可使用 addAllowedOriginPattern 代替
// // corsConfiguration.addAllowedOrigin("*");
// // corsConfiguration.addAllowedOrigin("http://localhost:8080");
// corsConfiguration.addAllowedOriginPattern("*");
// // 是否发送Cookie信息
// corsConfiguration.setAllowCredentials(true);
// // 允许的请求方式
// corsConfiguration.addAllowedMethod("*");
// // corsConfiguration.addAllowedMethod("OPTIONS");
// // corsConfiguration.addAllowedMethod("HEAD");
// // corsConfiguration.addAllowedMethod("GET");
// // corsConfiguration.addAllowedMethod("PUT");
// // corsConfiguration.addAllowedMethod("POST");
// // corsConfiguration.addAllowedMethod("DELETE");
// // corsConfiguration.addAllowedMethod("PATCH");
// corsConfiguration.setMaxAge(3600L);
// // 允许的头信息
// corsConfiguration.addAllowedHeader("*");
// // 添加映射路径,拦截所有请求
// UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
// configSource.registerCorsConfiguration("/**", corsConfiguration);
// return new CorsFilter(source);
// }
}
Annotation 注解
使用 @CrossOrigin
WebSocket STOMP Config WebSocket STOMP 配置
当 allowCredentials 为 true 时,allowedOrigins不可以包含 “*”,又因为不可以设置 allowedOriginPatterns,因此 AllowedOrigins 需要指定具体 协议、域名、端口。如:http://localhost:8080
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
/**
* 配置Stomp端点
*
* @param registry
*/
@Override
protected void configureStompEndpoints(StompEndpointRegistry registry) {
// HTTP URL 端点 用于WebSocket客户端连接到WebSocket handshake
registry.addEndpoint(WebSocketConstant.STOMP_ENDPOINTS)
// allowCredentials 为 true 时,allowedOrigins不可以包含 "*"
// .setAllowedOrigins("*")
.setAllowedOrigins("http://localhost:8080")
// 有 连接时使用http(s) 没有 连接时使用ws(s)
.withSockJS();
}
}