package cc.mrbird.febs.common.configure; import cc.mrbird.febs.common.entity.FebsConstant; import cc.mrbird.febs.common.properties.FebsProperties; import cc.mrbird.febs.common.properties.SwaggerProperties; import cc.mrbird.febs.common.xss.XssFilter; import io.swagger.annotations.Api; 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.ParameterBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.schema.ModelRef; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact; import springfox.documentation.service.Parameter; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; import java.util.*; 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 xssFilterRegistrationBean() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean<>(); filterRegistrationBean.setFilter(new XssFilter()); filterRegistrationBean.setOrder(1); filterRegistrationBean.setEnabled(true); filterRegistrationBean.addUrlPatterns("/*"); Map 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(); ParameterBuilder parameterBuilder = new ParameterBuilder(); List parameters = new ArrayList(); parameterBuilder.name("token").description("token参数").modelRef(new ModelRef("string")).parameterType("header") .required(false).build(); parameters.add(parameterBuilder.build()); return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.withClassAnnotation(Api.class)) .paths(PathSelectors.any()) .build() .globalOperationParameters(parameters) .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()); } }