springcloud微服务-gateway

1.引入依赖

2.添加配置项

 

网关自动路由:

网关+eureka中的服务名称+路劲  例如 localhost:65000/feign-client/sayHi

1.查看路由

2.动态添加路由

3.删除路由

4.修改路由

 

gateway断言:

1.path断言

2.method断言

3.requestParam断言

4.Header断言

5.cookie断言

6.时间片断言

7.自定义断言

 

自定义路由规则配置方法:

yml配置

 

 java代码配置

 

 

 

实现自定义filter

1.实现gatewayfilter或者globalfilter和ordered接口

2.添加到filter中

 

实现用户鉴权的方案:

1.传统session

2.session复制

3.绑定ip后者一致性hash

4.存放在redis的session

5.oauth2.0

6.jwt

  1)根据账号名密码生成token

  2)验证token有效性,有效则允许访问资源

  token包含三部分:header,playload,signature。 

 

 

tips:一天不练手生脚慢,两天不练功丢一半,三天不练成了门外汉。

gateway配置redis限流:

1.写限流配置类

@Configuration
public class RateLimiterConfiguration {

//hostAddr的key,基于调用方ip的限流
@Bean
@Primary
public KeyResolver remoteAddrKeyResolver(){
return exchange -> Mono.just(
exchange.getRequest()
.getRemoteAddress()
.getAddress()
.getHostAddress()
);
}

@Bean("redisLimiterUser")
@Primary
public RedisRateLimiter redisLimiterUser(){
return new RedisRateLimiter(1,2);
}

@Bean("redisLimiterItem")
public RedisRateLimiter redisLimiterItem(){
return new RedisRateLimiter(20,50);
}
}

2.配置文件添加redis连接信息

redis:
host: localhost
port: 6379

3.在对应路由规则下添加限流过滤器

.route(r->r.path("/address/**","/passport/**","/userInfo/**","/center/**")
.filters(f->f.requestRateLimiter(c->c.setKeyResolver(hostNameKeyResolver)
.setRateLimiter(rateLimiter)
.setStatusCode(HttpStatus.BAD_GATEWAY)))
.uri("lb://FOODIE-USER-SERVICE"))

gateway设置全局跨域,一切前端都和gateway进行交互,所以gateway设置允许跨域即可,其他微服务不需要在单独设置允许跨域。

cloud:
gateway:
globalcors:
cors-configurations:
'[/**]':
# 返回的资源共享给请求来源
allowed-origins:
- "http://localhost:8080"
- "http://shop.z.mukewang.com:8080"
- "http://center.z.mukewang.com:8080"
- "http://shop.z.mukewang.com"
- "http://center.z.mukewang.com"
- "*"
# 比如cookie, authorization之类的认证信息
allow-credentials: true
allowed-headers: "*"
allowed-methods: "*"
expose-headers: "*"
# 表示Options可以在浏览器缓存多长时间
max-age: 600

posted @ 2020-09-03 03:39  红嘴鲤鱼  阅读(545)  评论(0编辑  收藏  举报