swagger-bootstrap-ui分组的swager重写的UI

本文介绍了如何使用 Swagger-Bootstrap-UI 对 Swagger 进行分组,并展示了如何配置 Swagger2Config,包括设置 Shiro 过滤器进行权限管理。同时,文章提到了如何处理 Swagger 的分组刷新后增强功能失效的问题,以及如何添加安全认证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网关的地址: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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值