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;
}
}
PREVIOUSJava异常处理策略:重试
NEXTRedis基本命令