springboot springcloud zuul 过滤器

1.继承类:ZuulFilter

2.丢失请求头:Authorization

3.转发请求头:Authorization 

4.使用场景:验证权限

1.继承类:ZuulFilter

package com.ligy.school.zuul.filter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component;

@Component
public class AuthFilter extends ZuulFilter {
    public String filterType() {
        //pre 请求前面  post请求后面  error发生错误时  //route 在路由请求时被调用

        return "pre";
    }

    public int filterOrder() {
        //执行顺序 0 1 2  最先执行的是0,小的先执行
        return 0;
    }

    public boolean shouldFilter() {
        //开关:true 打开 false:关闭
        return true;
    }

    public Object run() throws ZuulException {
        //返回Object 就等于放行
        System.out.println("过滤器,执行了");

        return null;
    }
}

2.丢失请求头:Authorization

 

 

3.转发请求头:Authorization


public Object run() throws ZuulException {
        //返回Object 就等于放行
        System.out.println("过滤器,执行了");

        RequestContext context = RequestContext.getCurrentContext();
        HttpServletRequest request = context.getRequest();
        String authorization = request.getHeader("Authorization");
        System.out.println("zuul:authorization:" + authorization);

        if (authorization != null && !"".equals(authorization)) {
            //转发头
            context.addZuulRequestHeader("authorization", authorization);
            System.out.println("zuul:转发头:authorization:" + authorization);
            return "ok";
        }

        context.setResponseStatusCode(401);
        context.setResponseBody("权限校验失败");
        context.setSendZuulResponse(false);//禁止通行
        context.getResponse().setContentType("text/html;charset=utf-8");
        return null;
    }



 

 问题:转发后, 依然拿 不到头。

解决方法:

#配置不过滤所有头
zuul.sensitive-headers=""

4.使用场景:验证权限

public Object run() throws ZuulException {
        //返回Object 就等于放行
        System.out.println("过滤器,执行了");

        RequestContext context = RequestContext.getCurrentContext();
        HttpServletRequest request = context.getRequest();
        String authorization = request.getHeader("Authorization");
        System.out.println("zuul:authorization:" + authorization);

        if (authorization != null && !"".equals(authorization)) {
            //转发头
            context.addZuulRequestHeader("authorization", authorization);
            System.out.println("zuul:转发头:authorization:" + authorization);
            return "ok";
        }

        context.setResponseStatusCode(401);
        context.setResponseBody("权限校验失败");
        context.setSendZuulResponse(false);//禁止通行
        context.getResponse().setContentType("text/html;charset=utf-8");
        return null;
    }

天生我材必有用,千金散尽还复来
原文地址:https://www.cnblogs.com/ligenyun/p/15808730.html