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

com.itcoon.common.web.swagger.config.SwaggerConfig Maven / Gradle / Ivy

There is a newer version: 1.1.2.RELEASE
Show newest version
package com.itcoon.common.web.swagger.config;

import com.itcoon.common.core.enums.DescribedEnum;
import com.itcoon.common.core.enums.ValueEnum;
import com.itcoon.common.web.swagger.config.property.SwaggerConfigurerProperty;
import com.itcoon.common.web.swagger.plugin.swagger2.ApiEnumPropertyBuilderPlugin;
import com.itcoon.common.web.swagger.plugin.swagger2.CodeEnumPropertyBuilderPlugin;
import com.itcoon.common.web.swagger.plugin.swagger2.EnumExpandedParameterBuilderPlugin;
import com.itcoon.common.web.swagger.plugin.swagger2.EnumParameterBuilderPlugin;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.DescriptionResolver;
import springfox.documentation.spring.web.plugins.ApiSelectorBuilder;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 

* * @author itsherman * @since 2019-09-04 */ @EnableSwagger2 @EnableConfigurationProperties(SwaggerConfigurerProperty.class) @ConditionalOnProperty(prefix = "spring.http.web.swagger", name = "enable", havingValue = "true") public class SwaggerConfig { @Autowired private DescriptionResolver descriptions; @Autowired private SwaggerConfigurerProperty configurerProperty; @Bean public Docket docket() { ApiSelectorBuilder apis = new Docket(DocumentationType.SWAGGER_2) .apiInfo(ApiInfo.DEFAULT) .select() .apis(RequestHandlerSelectors.withClassAnnotation(Api.class)); String[] patterns = configurerProperty.getPathAntPatterns(); if(patterns != null){ for (String pattern : patterns) { apis = apis.paths(PathSelectors.ant(pattern)); } } Docket docket = apis.build(); if(configurerProperty.getSecurity().isEnable()){ docket.securitySchemes(securitySchemes(configurerProperty.getSecurity().getSchemas())); docket.securityContexts(securityContexts(configurerProperty.getSecurity().getSchemas())); } return docket; } @Bean public ApiEnumPropertyBuilderPlugin apiEnumPropertyBuilderPlugin(){ return new ApiEnumPropertyBuilderPlugin(); } @Bean @ConditionalOnClass(value = {ValueEnum.class, DescribedEnum.class}) public CodeEnumPropertyBuilderPlugin codeEnumPropertyBuilderPlugin(){ return new CodeEnumPropertyBuilderPlugin(descriptions); } @Bean @ConditionalOnClass(value = {ValueEnum.class, DescribedEnum.class}) public EnumExpandedParameterBuilderPlugin codeEnumExpandBuilderPlugin(){ return new EnumExpandedParameterBuilderPlugin(descriptions); } @Bean public EnumParameterBuilderPlugin enumParameterBuilderPlugin(){ return new EnumParameterBuilderPlugin(descriptions); } private List securitySchemes(SwaggerConfigurerProperty.Security.Schema[] schemas) { List res = new ArrayList<>(); Arrays.stream(schemas).forEach(schema->res.add(schema.getSecurityScheme())); return res; } private List securityContexts(SwaggerConfigurerProperty.Security.Schema[] schemas) { List res = new ArrayList<>(); res.add(SecurityContext.builder() .securityReferences(defaultAuth(schemas)) .forPaths(PathSelectors.regex("/.*")) .build()); return res; } private List defaultAuth(SwaggerConfigurerProperty.Security.Schema[] schemas) { List res = new ArrayList<>(); Arrays.stream(schemas).forEach(schema->res.add(schema.getSecurityReference())); return res; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy