Gateway统一网关
# 统一网关 Gateway
# 为什么需要网关
服务内部有相互访问的话Feign进行调用 但是外部的请求就没有安全措施了 不是所有业务都是对外公开的 我们得对用户的身份进行验证 否则拦截
这里网关就出现了并且带着这些功能来了
网关技术实现(目前来说都会使用gateway来进行网关)
# 搭建网关服务
搭建网关服务的步骤:
网关自己也是服务 需要被nacos发现
2.编写路由配置及nacos地址
lb:loadBalance缩写
当前含义: 我要把请求路由到用户服务(userservice)
需要一个路由规则(和nginx很像)predicates:(判断请求是否符合路由规则)
用nginx请求会到服务上,要在服务做鉴权,网关可以先鉴权拦截,不会给服务造成太大压力
总结:
# 路由断言工厂Route Predicate Factory
这里的路由规则是要求在2031年之后才可以访问, 访问的话就会报404
使用Before的话就可以访问到了
这个路由工厂的规则按照需求使用不用强记
# 路由过滤器 GatewayFilter
这里响应结果的返回过程也是可以被网关做操作再返回给用户的,例如:把响应头拿出来,把响应体弄一弄之类
(要点:根据名字来了解过滤器工厂的功能)
验证 在这个方法中添加一个参数 加上这个注解@RequestHeader
这样spring就能帮助我们获得这个请求头的这个参数,加required可以应对没有传过来的情况
我们如果要在所有的微服务都实现这个功能(配置在某个路由下只对那个服务有效 配置在default过滤器下 对所有的服务有效)
总结:
# 全局过滤器 GlobalFilter
(未登录的状态码是401 返回状态码为了用户体验)
实现这个过滤器在上面加两个注解
@Order(-1)将过滤器的位置或者说执行顺序确定
或者不用这个注解 实现Ordered接口 继承它的getOrder()方法 一样可以实现过滤器执行顺序的指定
测试:
当然实际开发的登录拦截不会说逻辑这么简单
总结:
# 过滤器执行顺序
总结:
# 跨域问题处理
所有的请求都是先经过网关再到微服务 所以跨域请求不是在每个服务处理 只需要在网关里面处理就好了
CORS: 浏览器问下服务器能不能走这个跨域请求
我们的ajax采用的是CORS方案 这个方案有一次询问 这个询问也是会被网关拦截的 加上 add-to-simple-url-handler-mapping: true
可以解决询问被拦截的问题
加上有效期maxAge
的设置可以让询问不要每次都执行给服务器增加压力
测试:
将网关的跨域配置加上以后重启服务
总结:
我们现在已经学了微服务最常用的组件了