zoukankan      html  css  js  c++  java
  • zuul配置过滤器

    zuul配置过滤器

    zuul过滤器类型

    • pre

      • 可以在请求被路由之前调用。适用于身份认证的场景,认证通过后再继续执行下面的流程
    • route

      • 在路由请求时被调用。适用于灰度发布场景,在将要路由的时候可以做一些自定义的逻辑。
    • post

      • 在 route 和 error 过滤器之后被调用。这种过滤器将请求路由到达具体的服务之后执行。适用于需要添加响应头,记录响应日志等应用场景。
    • error

      • 处理请求时发生错误时被调用。在执行过程中发送错误时会进入 error 过滤器,可以用来统一记录错误信息。

    如何配置:继承 com.netflix.zuul.ZuulFilter

    package com.yl.filter;
    
    import com.netflix.zuul.context.RequestContext;
    import com.netflix.zuul.exception.ZuulException;
    import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
    import org.springframework.stereotype.Component;
    import javax.servlet.http.HttpServletRequest;
    
    @Component
    public class ZuulFilter extends com.netflix.zuul.ZuulFilter {
    
       /*
        * 指明过滤器类型,它是一个PRE过滤器
        * */
        @Override
        public String filterType() {
            return FilterConstants.PRE_TYPE;
        }
    
       /*
        * 同一个过滤器类型的执行顺序
        * */
        @Override
        public int filterOrder() {
            return 1;
        }
    
       /*
        * 是否作拦截处理
        * */
        @Override
        public boolean shouldFilter() {
            return true;
        }
    
       /*
        * 过滤器的业务逻辑处理
        * */
        @Override
        public Object run() throws ZuulException {
            RequestContext context= RequestContext.getCurrentContext();
            //获取http的request对象
            HttpServletRequest request=context.getRequest();
            //获取请求参数:token
            String token=request.getParameter("token");
    
            System.out.println("zuul filter token="+token);
    
            //token如果有数据,并且等于1234,则允许访问,否则拦截处理
            if(token!=null && token.equals("1234")) {
                return null;
            }else {
                //如何实现拦截处理
                RequestContext ctx = RequestContext.getCurrentContext();
                //设置为false:不再转发请求到目标服务
                ctx.setSendZuulResponse(false);
                ctx.set("sendForwardFilter.ran", true);
                ctx.setResponseBody("token error");
                return null;
            }
        }
    }
    
    记得快乐
  • 相关阅读:
    MongoDB
    新公司管理经营
    剪辑理论
    色彩理论
    商业模式
    电影手法
    [好文转载] 每个程序员都应该学习使用Python或Ruby
    File类递归
    【CF1447】div2复盘
    【心得体会】11.9-11.15
  • 原文地址:https://www.cnblogs.com/Y-wee/p/14140448.html
Copyright © 2011-2022 走看看