• SpringCloud学习笔记(19)----Spring Cloud Netflix之服务网关Zuul自定义过滤器


      zuul不仅只是路由,还可以自定义过滤器来实现服务验证。

      实现案例:自定义过滤器,检验头部是否带有token,如果token=wangx,则通过校验,若不存在或不为wangx则返回提示token错误。

      扩展:一般情况下,可以采用JWT规范来做token的校验。

      JWT:https://jwt.io/

    1. 自定义过滤器

    package com.wangx.cloud.springcloud04zuul.filter;
    
    import com.netflix.zuul.ZuulFilter;
    import com.netflix.zuul.context.RequestContext;
    import com.netflix.zuul.exception.ZuulException;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    public class MyFilter extends ZuulFilter {
        @Override
        public String filterType() {
            return "pre";
        }
    
        @Override
        public int filterOrder() {
            return 1;
        }
    
        @Override
        public boolean shouldFilter() {
            return true;
        }
    
        @Override
        public Object run() throws ZuulException {
    
            //获取requestContext实例
            RequestContext requestContext = RequestContext.getCurrentContext();
            //获取到request对象
            HttpServletRequest request = requestContext.getRequest();
    
            //获取response对象
    
            HttpServletResponse response = requestContext.getResponse();
            // 判断token是否为wangx, 1 继续往下执行,否则打印token error
            if (!"wangx".equals(request.getHeader("token"))) {
                try {
                    //输出流中写入错误信息
                    PrintWriter printWriter = response.getWriter();
                    printWriter.write("token is error");
                    printWriter.flush();
                    printWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("请求路径为:---" + request.getRequestURI());
            return null;
        }
    }

    2. 注册自定义的过滤器

     @Bean
        public MyFilter myFilter() {
            return new MyFilter();
        }

    3. 测试

      使用postman访问:http://localhost:9876/spring-cloud-consumer/user/1

      

     

      

  • 相关阅读:
    HDU 5528 Count a * b 欧拉函数
    HDU 5534 Partial Tree 完全背包
    HDU 5536 Chip Factory Trie
    HDU 5510 Bazinga KMP
    HDU 4821 String 字符串哈希
    HDU 4814 Golden Radio Base 模拟
    LA 6538 Dinner Coming Soon DP
    HDU 4781 Assignment For Princess 构造
    LA 7056 Colorful Toy Polya定理
    LA 6540 Fibonacci Tree
  • 原文地址:https://www.cnblogs.com/Eternally-dream/p/9870294.html
Copyright © 2020-2023  润新知