首先引入yml自动提示所需j依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<!--<optional>true</optional>-->
</dependency>
- CorsFilterProperties类
@Data
@ConfigurationProperties("request.cors")
public class CorsFilterProperties {
private Boolean enabled;
private String path;
private String origin;
private String allowedHeader;
private String method;
private String exposedHeader;
@Nullable
private Boolean allowCredentials;
@Nullable
private Long maxAge;
}
- CorsFilterConfig类
import static org.apache.commons.lang3.StringUtils.defaultString;
/**
* @author: hs
* @Date: 2019/4/8 17:05
* @Description: 跨域配置
* CorsFilterConfig
*/
@Configuration
@EnableConfigurationProperties(value = {CorsFilterProperties.class})
public class CorsFilterConfig {
private static final String PATH = "/**";
private final CorsFilterProperties properties;
@Autowired
public CorsFilterConfig(CorsFilterProperties properties) {
this.properties = properties;
}
private CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin(defaultString(properties.getOrigin(), CorsConfiguration.ALL));
corsConfiguration.addAllowedHeader(defaultString(properties.getAllowedHeader(), CorsConfiguration.ALL));
corsConfiguration.addAllowedMethod(defaultString(properties.getMethod(), CorsConfiguration.ALL));
// 是否发送 Cookie 信息
corsConfiguration.setAllowCredentials(properties.getAllowCredentials());
if (!Objects.equal(properties.getMaxAge(),null)) {
corsConfiguration.setMaxAge(properties.getMaxAge());
}
if (StringUtils.isNotBlank(properties.getExposedHeader())) {
corsConfiguration.addExposedHeader(properties.getExposedHeader());
}
return corsConfiguration;
}
/**
* 跨域过滤器
*
* @return Cors过滤器
*/
@Bean
@ConditionalOnMissingBean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration(defaultString(properties.getPath(), PATH), buildConfig());
return new CorsFilter(source);
}
}
- EnableCorsFilter 注解
/**
* Cors 跨域过滤
* @author hs
*/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import({CorsFilterConfig.class})
public @interface EnableCorsFilter {
}
- 启动类
- yml文件根据需求自行配置,不配置默认是all