up:: 通过网关zuul实现路由功能
说明:
那我们首先看一看在zuul有哪几种过滤器,第一个是 pre在请求之前运行的,通常情况下,我们的鉴权是放在这里的,因为在没有权限的时候,你不应该访问后续的内容,同样的,它还有一个 route, 第三种的是 post, 是在请求完成之后进行运行的。通常什么时候会用到这个呢?比如说你去统计各个请求所运行的时长了,那这个时候就可以在 pre 去首先把这个当前时间记下来,然后呢在 post 里面把时间进行减,这样就能得到总共的时长,那么第四种类型的是,如果在请求处理的过程中发生了错误,那这个 error 过滤器会进行运行。
四种过滤器:
pre过滤器
注意需要继承ZuulFilter类
post过滤器
shouldFilter
该方法表示是否执行该过滤器,也可以说是该过滤器的一个开关。
run
过滤器的具体逻辑。在该函数中,我们可以实现自定义的过滤逻辑,来确定是否要拦截当前的请求,不对其进行后续的路由,或是在请求路由返回结果之后,对处理结果做一些加工等。
看完上述的源码之后,这里我们再来编写自定的Filter代码。
首先继承ZuulFilter
该类,然后实现里面的方法。
首先是shouldFilter
方法,这里我们就直接返回true;
然后是filterType
,这里我们就设置为前置过滤器,在请求被路由之前调用。
继而是filterOrder
,这里我们就设置0;
最后是run
,这是过滤器的核心业务代码,这里我们就简单一点,获取请求的url,如果该url携带了token,我们就让他通过,否则直接拦截。
说明:
Zuul提供了一个框架,可以对过滤器进行动态的加载,编译,运行。
Zuul的过滤器之间没有直接的相互通信,他们之间通过一个RequestContext的静态类来进行数据传递的。RequestContext类中有ThreadLocal变量来记录每个Request所需要传递的数据。
关于RequestContext需要多查资料学习,复习servlet知识。。