SpringCloud--Day6

1.为什么要用网关服务

1.稳定性,高可用
2.性能,并发性
3.确保服务使用的安全
4.扩展性

在这里插入图片描述

2. 常见的方案

Nginx+Lua
Kong基础Nginx
Tyk go语言开发
Spring Cloud Zuul 基于java
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

public class MyFilter extends ZuulFilter {
    @Override
    String filterType() {
        return "pre"; //定义filter的类型,有pre、route、post、error四种
    }
 
    @Override
    int filterOrder() {
        return 10; //定义filter的顺序,数字越小表示顺序越高,越先执行
    }
 
    @Override
    boolean shouldFilter() {
        return true; //表示是否需要执行该filter,true表示执行,false表示不执行
    }
 
    @Override
    Object run() {
        return null; //filter需要执行的具体操作
    }
}

自定义Filter示例


我们假设有这样一个场景,因为服务网关应对的是外部的所有请求,为了避免产生安全隐患,我们需要对请求做一定的限制,比如请求中含有Token便让请求继续往下走,如果请求不带Token就直接返回并给出提示。

首先自定义一个Filter,在run()方法中验证参数是否含有Token

public class TokenFilter extends ZuulFilter {
 
    private final Logger logger = LoggerFactory.getLogger(TokenFilter.class);
 
    @Override
    public String filterType() {
        return "pre"; // 可以在请求被路由之前调用
    }
 
    @Override
    public int filterOrder() {
        return 0; // filter执行顺序,通过数字指定 ,优先级为0,数字越大,优先级越低
    }
 
    @Override
    public boolean shouldFilter() {
        return true;// 是否执行该过滤器,此处为true,说明需要过滤
    }
 
    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
 
        logger.info("--->>> TokenFilter {},{}", request.getMethod(), request.getRequestURL().toString());
 
        String token = request.getParameter("token");// 获取请求的参数
 
        if (StringUtils.isNotBlank(token)) {
            ctx.setSendZuulResponse(true); //对请求进行路由
            ctx.setResponseStatusCode(200);
            ctx.set("isSuccess", true);
            return null;
        } else {
            ctx.setSendZuulResponse(false); //不对其进行路由
            ctx.setResponseStatusCode(400);
            ctx.setResponseBody("token is empty");
            ctx.set("isSuccess", false);
            return null;
        }
    }
 
}

猜你喜欢

转载自blog.csdn.net/qq_40134461/article/details/83120347
今日推荐