Spring Cloud之Zuul

作者: 不知名的程序员 | 来源:发表于2018-08-31 17:02 被阅读264次

    在微服务架构中,诸如一些登录验证、签名验证都是由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的基本入门已经讲解完了,有关其配置等详细信息请参考官网。

    相关文章

      网友评论

        本文标题:Spring Cloud之Zuul

        本文链接:https://www.haomeiwen.com/subject/zrqamftx.html