Swagger使用

Maven依赖

<dependency>  
    <groupId>io.springfox</groupId>  
    <artifactId>springfox-swagger2</artifactId>  
    <version>2.9.2</version>  
</dependency>  
  
<dependency>  
    <groupId>io.springfox</groupId>  
    <artifactId>springfox-swagger-ui</artifactId>  
    <version>2.9.2</version>  
</dependency>

免登录访问

@Bean  
public SecurityFilterChain formFilterChain(HttpSecurity http) throws Exception {  
    http.authorizeRequests((requests) -> requests  
                    .antMatchers(HttpMethod.GET, "/swagger-ui.html", "/webjars/**", "/v2/api-docs", "/swagger-resources/**").permitAll()  
                    .anyRequest().authenticated())  
            .csrf().disable()  
            .apply(new JwtLoginConfigurer())  
            .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);  
    return http.build();  
}

自定义配置

@ConfigurationProperties(prefix = "odm.swagger")  
@Data  
public class SwaggerProperties {  
    String[] enabledProfiles;  
}
odm:  
  swagger:  
    enabled-profiles:  
      - dev  
      - test

配置

package com.oliverclio.odm.config.swagger;  
  
import com.oliverclio.odm.properties.SwaggerProperties;  
import com.oliverclio.odm.properties.SystemProperties;  
import io.swagger.annotations.ApiOperation;  
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  
import org.springframework.core.env.Environment;  
import org.springframework.core.env.Profiles;  
import springfox.documentation.builders.ApiInfoBuilder;  
import springfox.documentation.builders.PathSelectors;  
import springfox.documentation.builders.RequestHandlerSelectors;  
import springfox.documentation.service.ApiInfo;  
import springfox.documentation.service.ApiKey;  
import springfox.documentation.service.AuthorizationScope;  
import springfox.documentation.service.SecurityReference;  
import springfox.documentation.spi.DocumentationType;  
import springfox.documentation.spi.service.contexts.SecurityContext;  
import springfox.documentation.spring.web.plugins.Docket;  
import springfox.documentation.swagger2.annotations.EnableSwagger2;  
  
import java.util.ArrayList;  
import java.util.List;  
  
@Configuration  
@EnableSwagger2  
public class SwaggerConfig {  
    @Bean  
    public Docket docket(Environment environment, SystemProperties systemProperties, SwaggerProperties swaggerProperties) {  
        Profiles profiles = Profiles.of(swaggerProperties.getEnabledProfiles());  
  
        return new Docket(DocumentationType.SWAGGER_2)  
                // 对基础信息的配置
                .apiInfo(createApiInfo(systemProperties))  
                .enable(environment.acceptsProfiles(profiles))  
                .select()  
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))  
                .paths(PathSelectors.any())  
                .build()  
                // 接口统一鉴权配置
                .securitySchemes(createApiKeyList())  
                .securityContexts(createSecurityContextList());  
    }  

    private ApiInfo createApiInfo(SystemProperties systemProperties) {  
        ApiInfoBuilder apiInfoBuilder = new ApiInfoBuilder();  
        apiInfoBuilder.title(systemProperties.getChineseName());  
        apiInfoBuilder.version(systemProperties.getVersion());  
        return apiInfoBuilder.build();  
    }  
  
    private List<ApiKey> createApiKeyList() {  
        List<ApiKey> apiKeyList = new ArrayList<>();  
        ApiKey apiKey = new ApiKey("Authorization", "Authorization", "header");  
        apiKeyList.add(apiKey);  
        return apiKeyList;  
    }  
  
    private List<SecurityContext> createSecurityContextList() {  
        SecurityContext securityContext = SecurityContext.builder()  
                .securityReferences(createSecurityReferenceList())  
                .forPaths(PathSelectors.regex("^(?!/login).*$"))  
                .build();  
        List<SecurityContext> securityContextList = new ArrayList<>();  
        securityContextList.add(securityContext);  
        return securityContextList;  
    }  
  
    private List<SecurityReference> createSecurityReferenceList() {  
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "global authorization");  
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];  
        authorizationScopes[0] = authorizationScope;  
  
        SecurityReference securityReference = new SecurityReference("Authorization", authorizationScopes);  
        List<SecurityReference> securityReferenceList = new ArrayList<>();  
        securityReferenceList.add(securityReference);  
        return securityReferenceList;  
    }  
}