CorsAccessControlConfiguration.java

package org.entando.kubernetes.config;

import java.util.Arrays;
import java.util.List;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@ConfigurationProperties(prefix = "cors.access.control.allow")
@Setter
public class CorsAccessControlConfiguration implements WebMvcConfigurer {

    private List<String> origins = Arrays.asList("*");
    private List<String> headers = Arrays.asList("Content-Type", "Authorization");
    private List<String> methods = Arrays.asList("GET", "POST", "PUT", "DELETE", "OPTIONS", "PATCH");
    private boolean credentials = true;

    @Value("${cors.access.control.maxAge:3600}")
    private long maxAge;

    @Value("${cors.enabled:false}")
    private boolean isCorsEnabled;

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        if (isCorsEnabled) {
            registry.addMapping("/**")
                    .allowedOriginPatterns(origins.toArray(new String[0]))
                    .allowedHeaders(headers.toArray(new String[0]))
                    .allowedMethods(methods.toArray(new String[0]))
                    .maxAge(maxAge)
                    .allowCredentials(credentials);
        }
    }
}