文章目录

  • 子模块配置
  • gateway模块配置

最近学习到微服务这块,子模块一个一个的swagger切换调试非常麻烦,于是想聚合在网关,研究了一段时间,发现网上的教程对新手很不友好,所以自己学习了之后整理出来供springboot项目改造成springcloud项目的小伙伴参考,适合新手入门
这是我的版本:

子模块配置

需要:
1.新增一个config文件
2.改动yaml文件
3.pom文件新增依赖
4.controller跟pojo上增加swagger注解(略)

package com.music.netsadcloudums.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.VendorExtension;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;import java.util.ArrayList;/*** @author Boss* ip:port/doc.html* 账号密码即见配置文件*/
@Configuration
@EnableSwagger2WebMvc
public class SwaggerConfig {//配置swagger的Docket的bean实例@Beanpublic Docket docket() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()//注意basePackage改成自己每个项目的路径.apis(RequestHandlerSelectors.basePackage("com.music.netsadcloud")).paths(PathSelectors.any()).build();}//配置swagger信息private ApiInfo apiInfo() {Contact contact = new Contact("作者姓名", "", "");return new ApiInfo("XXX接口文档","Api Documentation","1.0","urn:tos",contact,"Apache 2.0","http://www.apache.org/licenses/LICENSE-2.0",new ArrayList<VendorExtension>());}
}

配置文件的作用是增加swagger密码访问的权限

#==============================knife4j配置=======================================
knife4j:# 开启增强配置enable: truebasic:enable: true# Basic认证用户名username: test# Basic认证密码password: 987789

这里我用的依赖版本是2.0.8,不得不说作者萧明更新版本非常的快,所以高版本的注解有一些跟低版本不一样,不过作用大同小异,具体请去knife4j官网查看

        <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-micro-spring-boot-starter</artifactId><version>${knife4j.version}</version></dependency>

gateway模块配置

1.新增两个文件
2.修改yaml文件
3.pom文件新增依赖

新手不用懂为什么需要这两个文件,直接拷贝就行,不用任何修改
新增文件1:

package com.music.netsadcloudgateway.config;import lombok.AllArgsConstructor;
import org.springframework.cloud.gateway.config.GatewayProperties;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.support.NameUtils;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import springfox.documentation.swagger.web.SwaggerResource;
import springfox.documentation.swagger.web.SwaggerResourcesProvider;import java.util.ArrayList;
import java.util.List;/*** @author zhangyang*/
@Component
@Primary
@AllArgsConstructor
public class SwaggerProvider implements SwaggerResourcesProvider {public static final String API_URI = "v2/api-docs";private final RouteLocator routeLocator;private final GatewayProperties gatewayProperties;@Overridepublic List<SwaggerResource> get() {List<SwaggerResource> resources = new ArrayList<>();List<String> routes = new ArrayList<>();routeLocator.getRoutes().subscribe(route -> routes.add(route.getId()));gatewayProperties.getRoutes().stream().filter(routeDefinition -> routes.contains(routeDefinition.getId())).forEach(routeDefinition -> routeDefinition.getPredicates().stream().filter(predicateDefinition -> ("Path").equalsIgnoreCase(predicateDefinition.getName())).forEach(predicateDefinition -> resources.add(swaggerResource(routeDefinition.getId(),predicateDefinition.getArgs().get(NameUtils.GENERATED_NAME_PREFIX + "0").replace("**", API_URI)))));return resources;}private SwaggerResource swaggerResource(String name, String location) {SwaggerResource swaggerResource = new SwaggerResource();swaggerResource.setName(name);swaggerResource.setLocation(location);swaggerResource.setSwaggerVersion("2.0");return swaggerResource;}
}

新增文件2:

package com.music.netsadcloudgateway.handler;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;
import springfox.documentation.swagger.web.*;import java.util.Optional;@RestController
public class SwaggerHandler {@Autowired(required = false)private SecurityConfiguration securityConfiguration;@Autowired(required = false)private UiConfiguration uiConfiguration;private final SwaggerResourcesProvider swaggerResources;@Autowiredpublic SwaggerHandler(SwaggerResourcesProvider swaggerResources) {this.swaggerResources = swaggerResources;}/*** Swagger安全配置,支持oauth和apiKey设置*/@GetMapping("/swagger-resources/configuration/security")public Mono<ResponseEntity<SecurityConfiguration>> securityConfiguration() {return Mono.just(new ResponseEntity<>(Optional.ofNullable(securityConfiguration).orElse(SecurityConfigurationBuilder.builder().build()), HttpStatus.OK));}/*** Swagger UI配置*/@GetMapping("/swagger-resources/configuration/ui")public Mono<ResponseEntity<UiConfiguration>> uiConfiguration() {return Mono.just(new ResponseEntity<>(Optional.ofNullable(uiConfiguration).orElse(UiConfigurationBuilder.builder().build()), HttpStatus.OK));}/*** Swagger资源配置,微服务中这各个服务的api-docs信息*/@GetMapping("/swagger-resources")public Mono<ResponseEntity> swaggerResources() {return Mono.just((new ResponseEntity<>(swaggerResources.get(), HttpStatus.OK)));}
}

pom文件新增依赖:

    <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>${knife4j.version}</version></dependency>

接下来是重头戏了,gateway的yaml文件配置,这个坑了我很长时间,网上gateway与nacos整合的教学都大同小异互相抄来抄去,对新手一点都不友好

server:port: 8085
spring:cloud:nacos:discovery:server-addr: XXX.XXX.26.99:8848gateway:discovery:locator:enabled: false #让gateway可以发现nacos中的微服务 开启后会自动去掉一层路径,且routes会失效#如果完全注释routes,knife4j会失效routes: # 路由数组  指当请求满足什么样的条件的时候,转发到哪个微服务上
#        - id: netsadcloud-shop #当前路由标识,要求唯一 (默认值uuid,一般不用,需要自定义)
#          uri: lb://netsadcloud-shop #请求最终要被转发的地址   lb指的是从nacos中按照名称获取微服务,并遵循负载均衡策略
#          predicates: #断言 判断条件,返回值是boolean 转发请求要返回的条件 (可以写多个)
#            - Path=/netsadcloud-shop/** #当请求路径满足path指定的规则时,此路由信息才会正常转发
#          filters: #过滤器(在请求传递过程中,对请求做一些手脚)
#            - StripPrefix=1 # 在请求转发之前去掉一层路径- id: netsadcloud-umsuri: lb://netsadcloud-umspredicates:- Path=/netsadcloud-ums/**filters:- StripPrefix=1- id: netsadcloud-musicuri: lb://netsadcloud-musicpredicates:- Path=/netsadcloud-music/**filters:- StripPrefix=1application:name: netsadcloud-gateway

一开始我从网上粘贴的 enabled 是true,下面别人依旧配置了路由,但是我怎么改filters都不生效,改的我怀疑人生,还以为是springcloud版本问题,网上的一些教程真的很坑爹,坑的我眼泪直流

启动项目: 访问 http://localhost:8085/doc.html 输入账户密码访问


如果你启动了多个子模块,那么左上角可以在子模块之间切换

gateway-nacos-knife4j整合加访问权限控制(详细教程适合新手入门)相关推荐

  1. C++知识点11——this指针,const成员函数,访问权限控制

    1.this指针 每个类都有this指针,this指针指向this指针指向的是类的对象本身 class A { public:A() {}~A() {}void func() {cout<< ...

  2. private访问权限java_Java中的访问权限控制

    Java提供了public, private, protected 三个访问权限修饰词,提供了以下四种访问权限控制机制: 1.包访问权限: 2.Public访问权限: 3.Private访问权限: 4 ...

  3. Java学习-访问权限控制

    Java学习-访问权限控制 1.为什么要有访问权限控制? 2.包:库单元 3.Java访问权限修饰词 1.为什么要有访问权限控制? 访问控制(或隐藏具体实现)与"最初的实现并不恰当" ...

  4. SpringBoot整合SpringSecurity+Redis权限控制

    SpringBoot整合SpringSecurity+Redis权限控制 1.认识SpringSecurity 2.效果截图 2.1.登录接口 2.2.注册接口 2.3.管理员权限接口 2.4.普通用 ...

  5. SpringBoot整合SpringSecurity实现权限控制(五):用户管理

    系列文章目录 <SpringBoot整合SpringSecurity实现权限控制(一):实现原理> <SpringBoot整合SpringSecurity实现权限控制(二):权限数据 ...

  6. Java访问权限控制

    面向对象的核心思想之一就是封装,只把有限的方法和成员公开给别人,这也是迪米特法则的内在要求,是外部调用方对方法体内的实现细节知道得尽可能少. 如何实现封装呢? 需要使用某些关键字来限制外部对类内属性和 ...

  7. android 静态方法 构造方法,android基础-Java篇02:类和对象、构造方法、访问权限控制、重载、this关键字、static关键字...

    一.类和构造方法 (类和对象在百度百科已经有详细的介绍,这里只做简单的描述以及帮助理解:百度百科:类和对象,需要注意的是,百度百科类和对象的举例中都是C++,书写格式不要和Java混淆!) 什么是类? ...

  8. 文件服务器共享文件夹访问权限,5对文件服务器中的共享文件夹进行访问权限控制...

    对文件服务器中的共享文件夹进行访问权限控制 1. 实训目的 在Windows Server 2003环境下设置文件服务器的目的是要对多用户进行资源共享,这其中经常遇到不同用户应该分配不同权限的问题,通 ...

  9. [THINKING IN JAVA]访问权限控制

    6 访问权限控制 6.1 包:库单元 package.import.import *.import static: 修改classpath环境变量可以将自己写的类库添加至环境变量并在任何java程序中 ...

  10. 第6章 访问权限控制

    2014-12-09 20:14:52 访问权限控制 1.访问权限控制出现的原因 代码需要不断的重新创作才能变得完善. 要完善的公用代码(如:类库)已经被客户程序使用,修改后,可能会影响客户程序的功能 ...

最新文章

  1. 汇总|医学图像数据集
  2. 使用wide和buildbox构建完全在线的开发集成环境
  3. SAP MM不常用功能之供应商Rebate
  4. java rmi 原理和使用浅析
  5. 《Sibelius 脚本程序设计》连载(三十四) - 4.4 DateTime
  6. 《机器学习实战》第十三章 PCA
  7. Effective 笔记
  8. linux源码安装php缺少动态库,php源代码安装常见错误解决办法
  9. 对于Ping的过程,你真的了解吗?
  10. 怎样清除手机中的html文件夹,怎么彻底清除手机APP卸载后的残留文件夹 能删与不能删文件名...
  11. STM32之RCC配置
  12. virtualbox+vagrant学习-2(command cli)-15-vagrant resume命令
  13. 伦巴时间步的动作要领_拉丁舞教学视频,拉丁伦巴舞基本动作
  14. SELinux系列(二)——SELinux有什么作用
  15. oracle创建表(并且实现ID自增)
  16. Mongodb的oplogsize修改
  17. kuangbin棋盘问题
  18. MSM8937系统启动流程
  19. 近六成女受访者赞成“中国男配不上中国女”
  20. 10.13 写一个用矩形法求定积分的通用函数,分别求∫_0^1▒sinxdx 、∫_0^1▒cosxdx、∫_0^1▒〖e^x dx〗的值。

热门文章

  1. html设置名字颜色七彩,CSS对网页样式的定义
  2. 酒店怎么提高会员活跃度
  3. spring cloud 中消息总线(bus)使用
  4. ALBRECHT钻夹头AKL-ULTRA
  5. 练练童子功:产品原型设计,这款工具永久免费
  6. 易网客大数据广告将振兴商业WiFi市场
  7. 记应聘:北京童程童美科技有限公司 人工智能编程讲师
  8. “ISO专员”资质以及岗位职责范围的说明
  9. no ST-LINK detected解决方案(ST-LINK驱动安装教程)
  10. 继arp之后的IGM病毒