网关的地址:http://127.0.0.1:30666/doc.html
不加该插件,是自己的项目中直接:http://127.0.0.1:7074/swagger-ui.html
github地址 : https://github.com/liukaixiong/Swagger-Bootstrap-UI
<!--swagger-->
<!--swagger-->
<!--swagger-->
<!--<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>-->
<!-- <dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>-->
<!--<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<scope>compile</scope>
<version>1.5.21</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>${swagger.bootstarp.version}</version>
</dependency>-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>1.9.6</version>
</dependency>
权限相关的设置,若有的话,设置一下,如下
设置ShiroConfig
@Bean("shiroFilter")
public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
shiroFilter.setSecurityManager(securityManager);
//oauth过滤
Map<String, Filter> filters = new HashMap<>();
filters.put("oauth2", new OAuth2Filter());
shiroFilter.setFilters(filters);
Map<String, String> filterMap = new LinkedHashMap<>();
filterMap.put("/webjars/**", "anon");
filterMap.put("/druid/**", "anon");
filterMap.put("/app/**", "anon");
filterMap.put("/sys/login", "anon");
filterMap.put("/swagger/**", "anon");
filterMap.put("/v2/api-docs", "anon");
filterMap.put("/swagger-ui.html", "anon");
filterMap.put("/swagger-resources/**", "anon");
filterMap.put("/doc.html", "anon");
filterMap.put("/captcha.jpg", "anon");
filterMap.put("/aaa.txt", "anon");
filterMap.put("/**", "oauth2");
shiroFilter.setFilterChainDefinitionMap(filterMap);
return shiroFilter;
}
#编写Swagger2Config配置文件
import com.github.xiaoymin.knife4j.spring.annotations.EnableSwaggerBootstrapUi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.async.DeferredResult;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration;
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.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.List;
import static com.google.common.base.Predicates.or;
import static com.google.common.collect.Lists.newArrayList;
import static springfox.documentation.builders.PathSelectors.regex;
@Configuration
@EnableSwagger2
@EnableSwaggerBootstrapUi
@Import(BeanValidatorPluginsConfiguration.class)
public class SwaggerConfig implements WebMvcConfigurer {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2).groupName("所有").apiInfo(apiInfo()).select()
// 加了ApiOperation注解的类,才生成接口文档
// .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
// 包下的类,才生成接口文档
// .apis(RequestHandlerSelectors.basePackage("com.ktpis.admin.modules.sys.controller"))
// .apis(RequestHandlerSelectors.basePackage("com.ktpis.admin.modules.biz.controller"))
.apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
// swagger2 如何匹配多个controller
// 方法一、两个controller的上一级包
// 如com.ktpis.admin.modules.biz.controller改成com.ktpis.admin.modules
// 方法二、所有controller的都实现的一个接口,比如@RestController
// .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
.paths(PathSelectors.any()).build().securitySchemes(security());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder().title("开太平管理后台").description("ktp-admin文档").termsOfServiceUrl("www.ktpis.com")
.version("1.0").build();
}
private List<ApiKey> security() {
return newArrayList(new ApiKey("token", "token", "header"));
}
// ------------------------------------------------------------------------
/**
* 路径3+路径4
*
* @return
*/
@Bean
public Docket cApi() {
return new Docket(DocumentationType.SWAGGER_2).groupName("管理后台").genericModelSubstitutes(DeferredResult.class)
// .genericModelSubstitutes(ResponseEntity.class)
.useDefaultResponseMessages(false).forCodeGeneration(false).pathMapping("/").select()
.paths(or(regex("/combo/.*"), regex("/idx/.*"), regex("/edu/.*"), regex("/pw/.*"), regex("/sys/login")))// 过滤的接口
.build().securitySchemes(security()).apiInfo(cApiInfo());
}
private ApiInfo cApiInfo() {
return new ApiInfoBuilder().title("管理后台")// 大标题
.description("管理后台")// 详细描述
.version("1.0")// 版本
.termsOfServiceUrl("NO terms of service")
.contact(new Contact("charles", "www.ktpis.com", "ccing@126.com"))// 作者
.license("The Apache License, Version 2.0")
.licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html").build();
}
}
其中securitySchemes(security()
private List<ApiKey> security() {
return Lists.newArrayList(new ApiKey("token", "token", "header"));
}
可以让swagger自动识别,快速测试
两个Docket
是两个下拉分组
若刷新后增强功能不可用,需要清空浏览器缓存,才能正常显示
关于认证的信息,可以参考:https://www.w3cschool.cn/swaggerbootstrapui/swaggerbootstrapui-zwn232i8.html