All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.dengchen2020.core.config.BaseAutoConfiguration Maven / Gradle / Ivy

There is a newer version: 0.0.28
Show newest version
package io.github.dengchen2020.core.config;

import io.github.dengchen2020.core.properties.CorsBuilder;
import io.github.dengchen2020.core.properties.ETagBuilder;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.web.servlet.ConditionalOnMissingFilterBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.Ordered;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.filter.ShallowEtagHeaderFilter;

import java.time.Duration;
import java.util.List;

/**
 * 基础自动配置
 *
 * @author dengchen
 * @since 2024/5/31
 */
@EnableConfigurationProperties({CorsBuilder.class, ETagBuilder.class})
@PropertySource("classpath:application-core.properties")
@Configuration(proxyBeanMethods = false)
public class BaseAutoConfiguration {

    @ConditionalOnProperty(value = "dc.cors.enabled", matchIfMissing = true, havingValue = "true")
    @ConditionalOnMissingFilterBean(CorsFilter.class)
    @Bean
    public FilterRegistrationBean corsFilterFilterRegistrationBean(CorsBuilder builder) {
        CorsConfiguration config = new CorsConfiguration();
        if (StringUtils.hasText(builder.getAllowedOriginPatterns())) {
            config.addAllowedOriginPattern(builder.getAllowedOriginPatterns());
        }else if (!CollectionUtils.isEmpty(builder.getAllowedOrigins())) {
            config.setAllowedOrigins(builder.getAllowedOrigins());
        }else {
            config.addAllowedOriginPattern("*");
        }
        if (!CollectionUtils.isEmpty(builder.getAllowedHeaders())) {
            config.setAllowedHeaders(builder.getAllowedHeaders());
        }else {
            config.addAllowedHeader("*");
        }
        if (!CollectionUtils.isEmpty(builder.getExposedHeaders())) {
            config.setExposedHeaders(builder.getExposedHeaders());
        }
        if (!CollectionUtils.isEmpty(builder.getAllowedMethods())) {
            config.setAllowedMethods(builder.getAllowedMethods());
        }else {
            config.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS", "QUERY"));
        }
        if(builder.getAllowCredentials() != null){
            config.setAllowCredentials(builder.getAllowCredentials());
        }else {
            config.setAllowCredentials(true);
        }
        if(builder.getAllowPrivateNetwork() != null){
            config.setAllowPrivateNetwork(builder.getAllowPrivateNetwork());
        }else {
            config.setAllowPrivateNetwork(false);
        }
        if(builder.getMaxAge() != null){
            config.setMaxAge(builder.getMaxAge());
        }else {
            config.setMaxAge(Duration.ofDays(30));
        }
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean<>();
        filterRegistrationBean.setFilter(new CorsFilter(source));
        filterRegistrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE);
        return filterRegistrationBean;
    }

    @ConditionalOnProperty(value = "dc.etag.enabled", havingValue = "true")
    @ConditionalOnMissingFilterBean(ShallowEtagHeaderFilter.class)
    @Bean
    public FilterRegistrationBean etagFilterFilterRegistrationBean(ETagBuilder builder) {
        ShallowEtagHeaderFilter filter = new ShallowEtagHeaderFilter();
        if(builder.isWriteWeakETag()) filter.setWriteWeakETag(builder.isWriteWeakETag());
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean<>();
        filterRegistrationBean.setFilter(filter);
        return filterRegistrationBean;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy