采用gateway
作为服务网关组件
网关主要做三件事
sp-gateway
,然后浏览器访问:http://127.0.0.1:8080/sp-admin/test
sp-admin
服务的/test
接口Id-Token
模块(详细了解),这个模块会在内部生成一个token
存储到redis
上,只有通过网关的请求,才会携带token进入子服务为了防止token泄露
带来的安全问题,token
会每隔五分钟自动刷新一次
Id-Token
模块在设计时,充分考虑到了这一点,在每次刷新token
时,旧token
会被作为次级token
存储起来,
只要网关携带的token
符合新token
与次级token
任意一个即可通过认证,直至下一次刷新,新token
再次作为次级token
将此替换掉
是的,微服务之间的调用同样需要验证token
信息,只不过这一切都已经被封装好,你只需当做网关验证不存在一样直接调用即可
gateway
的转发规则是什么,难道只能通过服务名称进行请求转发吗?当然不是spring:
cloud:
gateway:
discovery:
locator:
#开启根据微服务名称自动转发
enabled: true
#微服务名称以小写形式呈现
lower-case-service-id: true
spring:
cloud:
gateway:
# 配置转发路由表
routes:
# 后台管理
- id: sp-admin
uri: lb://sp-admin
predicates:
- Path=/sp-admin/**
filters:
- StripPrefix=1
# 前台接口
- id: sp-home
uri: lb://sp-home
predicates:
- Path=/sp-home/**
filters:
- StripPrefix=1
@Configuration
public class RouteLocatorBean {
@Bean
public RouteLocator myRoutes(RouteLocatorBuilder builder) {
return builder.routes()
.route(p -> p
.path("/sp-admin/**")
.filters(f -> f.stripPrefix(1).addRequestHeader(SaIdUtil.ID_TOKEN, SaIdUtil.getToken()))
.uri("lb://sp-admin")
).build();
}
}
Sp-Cloud
使用的第一种,通过服务列表自动转发,只不过将配置信息放在了nacos
中,就是在配置nacos
时添加的sp-gateway.yml
文件gateway
集成nacos
后,将可以做到实时监听注册中心,每次有新服务注册或者退出时,gateway
将自动刷新路由表规则