在微服务架构中,诸如一些登录验证、签名验证都是由zuul完成,他还可以充当路由的功能帮我们转发请求,很类似于我们平常开发中拦截器的功能。
接下来我们基于前面的环境搭建一个zuul服务。
新建一个SpringBoot项目,导入zuul的依赖,在启动类上添加启用zuul的注解,编写配置文件。
上面就是一个简单的路由规则,当我们访问http://localhost:6860/item-service/**时,就会跳转到127.0.0.1:6866的服务进行处理。这样一个基本的路由功能就完成了。
面向服务改进:
上面的例子我们将url硬编码在配置文件中显然是不妥的,实践中我们会通过服务id进行路由,要通过服务id,首先需要注入Eureka的依赖以便于注册中心查找服务。然后将配置文件修改如下。
我们不在通过url指定而是通过serviceId进行指定。启动项目后再次访问http://localhost:6860/item-service/**时就会跳转到id为item-service的服务进行处理。
zuul还可以进行其他的一些公用配置,比如设置所有路由的前缀、忽略某些路由等。类似于我们配置shiro的访问规则。
zuul自定义过滤器
有了路由功能,接下来就是验证等过滤功能了,zuul提供了过滤器来实现我们的自定义过滤逻辑。
首先编写一个java类继承zuulFilter。
由上至下功能分别为:
1.过滤器类型,zuul一共定义了4中过滤器类型,分别为pre(路由之前调用),routing(路由时调用),exception(发生异常时调用),post(routing和error之后调用)
2.过滤器优先级,数值越小优先级越高
3.是否放行,true代表放行
4.具体的过滤逻辑
这里我们简单模拟一个登陆检查token的过滤器。我们对刚刚编写的过滤器进行改造
由于是演示作用,所以就将就着看把。。。启动应用后再次访问之前的url,我们会看到控制台做出相应打印并且浏览器显示error字样,当我们在请求后面加上"?token=aa"参数,则会正常调用我们的微服务,说明我们的过滤器生效。
一些注意事项
zuul的官方文档指出,他会默认过滤掉一些敏感的头信息,例如cookie,这意味着通过zuul的转发cookie将会丢失,为了解决这个问题,我们需要在配置文件中将zuul.sensitive-headers指为空。
至此zuul的基本入门已经讲解完了,有关其配置等详细信息请参考官网。
网友评论