package com.xcong.excoin.common.configure; 
 | 
  
 | 
import com.xcong.excoin.common.entity.FebsConstant; 
 | 
import com.xcong.excoin.common.properties.FebsProperties; 
 | 
import com.xcong.excoin.common.properties.SwaggerProperties; 
 | 
import com.xcong.excoin.common.xss.XssFilter; 
 | 
import lombok.RequiredArgsConstructor; 
 | 
import org.springframework.boot.web.servlet.FilterRegistrationBean; 
 | 
import org.springframework.context.annotation.Bean; 
 | 
import org.springframework.context.annotation.Configuration; 
 | 
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; 
 | 
import springfox.documentation.builders.PathSelectors; 
 | 
import springfox.documentation.builders.RequestHandlerSelectors; 
 | 
import springfox.documentation.service.ApiInfo; 
 | 
import springfox.documentation.service.Contact; 
 | 
import springfox.documentation.spi.DocumentationType; 
 | 
import springfox.documentation.spring.web.plugins.Docket; 
 | 
import springfox.documentation.swagger2.annotations.EnableSwagger2; 
 | 
  
 | 
import java.util.Collections; 
 | 
import java.util.HashMap; 
 | 
import java.util.Map; 
 | 
import java.util.concurrent.ThreadPoolExecutor; 
 | 
  
 | 
/** 
 | 
 * @author MrBird 
 | 
 */ 
 | 
@Configuration 
 | 
@EnableSwagger2 
 | 
@RequiredArgsConstructor 
 | 
public class FebsConfigure { 
 | 
  
 | 
    private final FebsProperties properties; 
 | 
  
 | 
    @Bean(FebsConstant.ASYNC_POOL) 
 | 
    public ThreadPoolTaskExecutor asyncThreadPoolTaskExecutor(){ 
 | 
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); 
 | 
        executor.setCorePoolSize(5); 
 | 
        executor.setMaxPoolSize(20); 
 | 
        executor.setQueueCapacity(200); 
 | 
        executor.setKeepAliveSeconds(30); 
 | 
        executor.setThreadNamePrefix("Febs-Async-Thread"); 
 | 
        executor.setWaitForTasksToCompleteOnShutdown(true); 
 | 
        executor.setAwaitTerminationSeconds(60); 
 | 
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); 
 | 
        executor.initialize(); 
 | 
        return executor; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * XssFilter Bean 
 | 
     */ 
 | 
    @Bean 
 | 
    public FilterRegistrationBean<XssFilter> xssFilterRegistrationBean() { 
 | 
        FilterRegistrationBean<XssFilter> filterRegistrationBean = new FilterRegistrationBean<>(); 
 | 
        filterRegistrationBean.setFilter(new XssFilter()); 
 | 
        filterRegistrationBean.setOrder(1); 
 | 
        filterRegistrationBean.setEnabled(true); 
 | 
        filterRegistrationBean.addUrlPatterns("/*"); 
 | 
        Map<String, String> initParameters = new HashMap<>(2); 
 | 
        initParameters.put("excludes", "/favicon.ico,/img/*,/js/*,/css/*"); 
 | 
        initParameters.put("isIncludeRichText", "true"); 
 | 
        filterRegistrationBean.setInitParameters(initParameters); 
 | 
        return filterRegistrationBean; 
 | 
    } 
 | 
  
 | 
    @Bean 
 | 
    public Docket swaggerApi() { 
 | 
        SwaggerProperties swagger = properties.getSwagger(); 
 | 
        return new Docket(DocumentationType.SWAGGER_2) 
 | 
                .select() 
 | 
                .apis(RequestHandlerSelectors.basePackage(swagger.getBasePackage())) 
 | 
                .paths(PathSelectors.any()) 
 | 
                .build() 
 | 
                .apiInfo(apiInfo(swagger)); 
 | 
    } 
 | 
  
 | 
    private ApiInfo apiInfo(SwaggerProperties swagger) { 
 | 
        return new ApiInfo( 
 | 
                swagger.getTitle(), 
 | 
                swagger.getDescription(), 
 | 
                swagger.getVersion(), 
 | 
                null, 
 | 
                new Contact(swagger.getAuthor(), swagger.getUrl(), swagger.getEmail()), 
 | 
                swagger.getLicense(), swagger.getLicenseUrl(), Collections.emptyList()); 
 | 
    } 
 | 
  
 | 
} 
 |