| 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()); | 
|     } | 
|   | 
| } |