/***********************************************************
 * @Description : 允许跨域访问
 * @author      : 梁山广(Laing Shan Guang)
 * @date        : 2019-05-17 00:11
 * @email       : liangshanguang2@gmail.com
 ***********************************************************/
package lsgwr.exam.config;// 指定当前类所在的包路径
// 导入所需的类
import jdk.internal.instrumentation.Logger;
import lombok.extern.slf4j.Slf4j;// Lombok库提供的注解，用于自动为类添加SLF4J日志记录器
import org.springframework.context.annotation.Bean;// Spring框架提供的注解，用于标记配置类
import org.springframework.context.annotation.Configuration;// Spring框架提供的注解，用于标记配置类。
import org.springframework.web.servlet.config.annotation.CorsRegistry;// Spring MVC框架提供的接口，用于自定义Web MVC配置
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;// Spring MVC框架提供的接口，用于自定义Web MVC配置。
// 使用@Configuration注解标记此类为Spring的配置类。
// 使用@Slf4j注解自动为类添加一个名为log的SLF4J日志记录器。
@Configuration
@Slf4j
public class CORSConf {
    // 使用@Bean注解声明一个方法，该方法将返回一个对象，该对象将被注册为Spring应用上下文中的bean。
    // 此处声明的方法返回一个WebMvcConfigurer类型的对象，用于配置跨域资源共享（CORS）
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        // 返回一个新的WebMvcConfigurer匿名类实例。
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                Logger log = null;
                // 尝试记录日志信息，但由于log被初始化为null，这行代码会抛出NullPointerException。
                log.info("初始化 CORSConfiguration 配置");
                // 使用CorsRegistry配置CORS规则：
                // 允许所有路径（"/**"）的跨域请求。
                // 允许所有HTTP头（"*"）。
                // 允许所有HTTP方法（"*"）。
                // 允许所有来源的跨域请求（"*"）。
                registry.addMapping("/**")
                        .allowedHeaders("*")
                        .allowedMethods("*")
                        .allowedOrigins("*");
            }
        };
    }
}
