Zuul一个网关插件
作用:
- 每个服务都可以被外界单独访问,所以我们就需要把所有的服务端口给隐藏,对外只提供一个统一访问的地址,
- 对内代理每个服务的路由,派发给某些服务
怎么使用Zuul 先导入zuul的依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
导入zuul的依赖后
我们在配置文件中进行相关配置
启动类添加注解
- @EnableZuulProxy声明启用zuul代理
- @EnableEurekaClient开启服务注册发现功能。
- 在把USER服务添加到网关里面
- http://localhost:19000/user/chaxun
- 然后我们就可以通过网关的端口来对用户服务进行访问了
Zuul的过滤器
ZuulFilter
- 那么我们怎么使用Zuul给我们提供的过滤器呢?
- 写一个子类过滤器来继承ZuulFilter给我们提供的过滤方法和相关配置
package com.example.s83790cloudzuul.filter;
import com.netflix.zuul.*;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
/**
* @author XiaoLiu
* @date 2021-11-02 08:24
**/
@Component
public class CustomZuulFilter extends ZuulFilter
{
@Override
public String filterType()
{
//过滤器的类型
// 1)pre
//可以在请求被路由之前调用。适用于身份认证的场景,认证通过后再继续执行下面的流程。
//2)route
//在路由请求时被调用。适用于灰度发布场景,在将要路由的时候可以做一些自定义的逻辑。
//3)post
//在 route 和 error 过滤器之后被调用。这种过滤器将请求路由到达具体的服务之后执行。适用于需要添加响应头,记录响应日志等应用场景。
//4)error
//处理请求时发生错误时被调用。在执行过程中发送错误时会进入 error 过滤器,可以用来统一记录错误信息。
return "pre";
}
@Override
public int filterOrder()
{
//此过滤器的优先级,0的优先级是最高,其他逐渐次知
return 0;
}
@Override
public boolean shouldFilter()
{
//是否开启过滤,开启true 关闭 false
RequestContext requestContext = RequestContext.getCurrentContext();
HttpServletRequest request = requestContext.getRequest();//获取当此被拦截的请求
String requestURI = String.valueOf(