springcloud2+gateway网关配置中心2(包含熔断,jwt认证,限流)
下面介绍1未讲完的网关功能 1重试功能,配置如下 这里可以不写实现类,采用默认的方式配置,然后发送一个http的GET请求,试着断开服务端查看后台: 证明配置正确,起作用了!2Jwt拦截器过滤直接配置在规则路由routes下面,然后写实现类所写的实体类都是要集成AbstractGatewayFilterFactory网关拦截器工厂接口。因...
下面介绍1未讲完的网关功能
1重试功能,配置如下
这里可以不写实现类,采用默认的方式配置,然后发送一个http的GET请求,试着断开服务端查看后台:
证明配置正确,起作用了!
2Jwt拦截器过滤
直接配置在规则路由routes下面,然后写实现类
所写的实体类都是要集成AbstractGatewayFilterFactory网关拦截器工厂接口。因为都是在filters拦截器下的配置属性
这里为啥不做认证配置呢,因为我的项目目前基础信息的auth2的认证服务和资源服务都是放在了一个服务上,所以这里面只需要对请求头携带token判断,简化了网关所需要的信息,但也带出来一个问题,如何来让未携带token认证服务通过网关接口呢,目前的设计思路如下
1直接在启动类手写Bean类,可以绕过配置服务的规则路由,这样就可以拿到认证Token
2单独为login配置一套,参照认证服务简单的模板,2种方法效果一致
3限流
限流几种方式:接口限流,用户限流,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,性能有点差跑不动这几个项目了,没测试)
借鉴其他人写的方法,其实也可以对限流进行具体的,因为不能测试,所以没做深入研究,下面只提供方法
去掉默认的限流限定
继承AbstractGatewayFilterFactory工厂类,写一个拦截器类和一个限流类
这样可以比配置文件更加做到细致,如果有人做到了这一步,欢迎把测试结果告诉我,谢谢!!!
更多推荐
所有评论(0)