springcloud2+gateway网关配置中心2(包含熔断,jwt认证,限流)

下面介绍1未讲完的网关功能

   1重试功能,配置如下

       springcloud2+gateway网关配置中心2(包含熔断,jwt认证,限流)_第1张图片

springcloud2+gateway网关配置中心2(包含熔断,jwt认证,限流)_第2张图片

这里可以不写实现类,采用默认的方式配置,然后发送一个http的GET请求,试着断开服务端查看后台:

springcloud2+gateway网关配置中心2(包含熔断,jwt认证,限流)_第3张图片

 证明配置正确,起作用了!

2Jwt拦截器过滤

springcloud2+gateway网关配置中心2(包含熔断,jwt认证,限流)_第4张图片

直接配置在规则路由routes下面,然后写实现类

springcloud2+gateway网关配置中心2(包含熔断,jwt认证,限流)_第5张图片

所写的实体类都是要集成AbstractGatewayFilterFactory网关拦截器工厂接口。因为都是在filters拦截器下的配置属性

这里为啥不做认证配置呢,因为我的项目目前基础信息的auth2的认证服务和资源服务都是放在了一个服务上,所以这里面只需要对请求头携带token判断,简化了网关所需要的信息,但也带出来一个问题,如何来让未携带token认证服务通过网关接口呢,目前的设计思路如下

1直接在启动类手写Bean类,可以绕过配置服务的规则路由,这样就可以拿到认证Token

springcloud2+gateway网关配置中心2(包含熔断,jwt认证,限流)_第6张图片

2单独为login配置一套,参照认证服务简单的模板,2种方法效果一致

3限流

springcloud2+gateway网关配置中心2(包含熔断,jwt认证,限流)_第7张图片

  springcloud2+gateway网关配置中心2(包含熔断,jwt认证,限流)_第8张图片

限流几种方式:接口限流,用户限流,IP限流

创建配置文件GatewayConfiguration如下

package com.wjx.gateway.Controller.common.config;

import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import reactor.core.publisher.Mono;

/**
 * 配置限流key
 */
@Configuration
public class GatewayConfiguration {
    /**
     * 接口限流操作
     * @return
     */
    @Bean(name="apiKeyResolver")
    public KeyResolver apiKeyResolver() {

        //根据api接口来限流
        return exchange ->
             Mono.just(exchange.getRequest().getPath().value());

    }

    /**
     * ip限流操作
     * @return
     */
    @Bean
    public KeyResolver ipKeyResolver() {
        return exchange -> Mono.just(exchange.getRequest().getRemoteAddress().getHostName());
    }

    /**
     * 用户限流
     * 使用这种方式限流,请求路径中必须携带userId参数。
     * @return
     */
//    @Bean
//    KeyResolver userKeyResolver() {
//        return exchange -> Mono.just(exchange.getRequest().getQueryParams().getFirst("userId"));
//    }
}

其实这样配置就应该可以实现限流的目的了(由于本人电脑没安装JMTER,性能有点差跑不动这几个项目了,没测试)

借鉴其他人写的方法,其实也可以对限流进行具体的,因为不能测试,所以没做深入研究,下面只提供方法

去掉默认的限流限定

springcloud2+gateway网关配置中心2(包含熔断,jwt认证,限流)_第9张图片

继承AbstractGatewayFilterFactory工厂类,写一个拦截器类和一个限流类

springcloud2+gateway网关配置中心2(包含熔断,jwt认证,限流)_第10张图片

springcloud2+gateway网关配置中心2(包含熔断,jwt认证,限流)_第11张图片springcloud2+gateway网关配置中心2(包含熔断,jwt认证,限流)_第12张图片

这样可以比配置文件更加做到细致,如果有人做到了这一步,欢迎把测试结果告诉我,谢谢!!!

 
 

你可能感兴趣的:(cloud,java)