package com.trafficaudit.common.config;
|
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.web.cors.CorsConfiguration;
|
import org.springframework.web.cors.CorsConfigurationSource;
|
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
|
import org.springframework.web.filter.CorsFilter;
|
|
import java.util.Arrays;
|
import java.util.List;
|
|
/**
|
* 跨域配置:只允许配置中列出的来源访问接口。
|
* 前后端分离本地开发默认放行 8080;前端经 dev-server 代理或与后端同源部署时均不需要额外放行。
|
* 注意:不开启 allowCredentials(接口用 Bearer 令牌鉴权,不依赖 Cookie),避免任意站点携带凭证调用。
|
*/
|
@Configuration
|
public class CorsConfig {
|
|
@Value("${app.cors.allowed-origins:http://localhost:8080,http://127.0.0.1:8080}")
|
private String allowedOrigins;
|
|
private List<String> originList() {
|
return Arrays.asList(allowedOrigins.split(","));
|
}
|
|
@Bean
|
public CorsConfigurationSource corsConfigurationSource() {
|
CorsConfiguration config = new CorsConfiguration();
|
config.setAllowedOrigins(originList());
|
config.setAllowedHeaders(Arrays.asList("Authorization", "Content-Type", "Accept", "X-Requested-With"));
|
config.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE", "OPTIONS"));
|
config.setAllowCredentials(false);
|
config.setMaxAge(3600L);
|
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
|
source.registerCorsConfiguration("/**", config);
|
return source;
|
}
|
|
@Bean
|
public CorsFilter corsFilter() {
|
return new CorsFilter(corsConfigurationSource());
|
}
|
}
|