栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springGateway聚合各服务Swagger进行统一管理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springGateway聚合各服务Swagger进行统一管理

网关配置
  1. 引入swagger相关依赖

    io.springfox
    springfox-boot-starter
    3.0.0

这里不建议引入像swagger-bootstrap-ui的第三方ui,对swagger3注解的兼容性不大好(我试了)

  1. 添加SwaggerConfig
@Component
@Primary
public class SwaggerConfig implements SwaggerResourcesProvider {

    
    private static final String SWAGGER2URL = "/v3/api-docs"; //要使用ui的话 改成v2 不然会出bug  比如有的地方 没有输入框

    
    private final RouteLocator routeLocator;

    
    @Value("${spring.application.name}")
    private String self;

    @Autowired
    public SwaggerConfig(RouteLocator routeLocator) {
        this.routeLocator = routeLocator;
    }

    
    @Override
    public List get() {
        List resources = new ArrayList<>();
        List routeHosts = new ArrayList<>();
        HashMap apiMap = new HashMap();
        // 获取所有可用的host:serviceId
        routeLocator.getRoutes().filter(route -> route.getUri().getHost() != null)
                .filter(route -> !self.equals(route.getUri().getHost()))
                .subscribe(route -> {
                    routeHosts.add(route.getUri().getHost());
                    // 分割网关配置的拦截路径 这里取第一个  /api/user, /api/chat
                    String routeApi = route.getPredicate().toString().split("\[")[1].split("]")[0].split(",")[0].replace("
    private List securitySchemes()
    {
        List result = new ArrayList<>();
        ApiKey apiKey = new ApiKey("xiaohong-token","身份令牌" ,"Header" );
        result.add(apiKey);
        return  Collections.singletonList(apiKey);
    }

    
    private List securityContexts() {
        return Collections.singletonList(
                SecurityContext.builder()
                        //这里第一个参数要对应上面创建的ApiKey的name值
                        .securityReferences(Collections.singletonList(new SecurityReference("xiaohong-token", new AuthorizationScope[]{new AuthorizationScope("global", "身份令牌")})))
                        .build()
        );
    }

}

在Docket里的一个pathMapping配置我这里配成/api是因为swagger被网关接手了后,那所有请求的请求地址都需要经过网关,我这有个习惯就是在经过网关前的路径都加了/api前缀,在网关处再过滤掉,如果没有或有其他习惯的,可以自己看着写

测试

网关访问 http://localhost:8001/swagger-ui/index.html


先来测试一个接口试试


可以看到,这个接口是需要提供token进行权限验证的,同时,这里的请求路径都是从网关的地址再凭借上我们自己加的/api,最后再拼接上接口的请求路径

那我们添加上token再试一遍


完成后这两把锁都锁上了,表示添加成功
如果没有都锁上,就要去看看配置文件里的两个名字是否没有匹配上了

再次测试

可以看到这次将我们输入的token带入了请求头中
我们使用调试工具看看

可以看到确实添加进去了
这里响应权限不足那是后端的处理逻辑
换一个有权限的账号token即可
这里我有不实验了
另一个服务我也不测了(写之前我已经测试过了,就不展示了)
饿了,吃饭去了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/345353.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号