package com.bonus.gateway.config;

import cn.hutool.core.collection.CollUtil;
import com.alibaba.nacos.common.utils.JacksonUtils;
import com.bonus.gateway.config.properties.CorsProperties;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
import org.springframework.web.util.pattern.PathPatternParser;

/**
 * Description： 全局跨域配置
 */
@Configuration
@Slf4j
public class GlobalCorsConfig {
    @Autowired
    private CorsProperties corsProperties;
    @Bean
    public CorsWebFilter corsFilter() {
        // 创建一个新的CorsConfiguration对象，用于配置跨域请求
        CorsConfiguration config = new CorsConfiguration();
        // 允许所有的HTTP请求方法（GET, POST, PUT, DELETE等）
        config.addAllowedMethod("*");
        // 允许所有的域名发起的请求 比如http://localhost:8080、
        log.info("允许的域名：{}", corsProperties.getAllowedOrigins());
        if(CollUtil.isNotEmpty(corsProperties.getAllowedOrigins())) {
            for(String cors : corsProperties.getAllowedOrigins()) {
                config.addAllowedOrigin(cors);
            }
        }else {
            config.addAllowedOrigin("*");
            // 允许所有的域名发起的请求（支持正则表达式） 比如http://localhost:8080
            config.addAllowedOriginPattern("*");
        }
        // 允许所有的请求头部信息 比如token、Content-Type
        config.addAllowedHeader("*");
        // 创建一个UrlBasedCorsConfigurationSource对象，并使用PathPatternParser进行路径匹配
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
        // 注册跨域配置，应用于所有的URL路径
        source.registerCorsConfiguration("/**", config);
        return new CorsWebFilter(source);
    }
}