springcloud之zuul网关服务并携带头信息转发token

启动类注解

@EnableZuulProxy
@EnableEurekaClient

配置文件

server.port=1120
#指定服务名
spring.application.name=eureka-client1
#Eureka客户端与Eureka服务端进行交互的地址
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:6868/eureka/
eureka.client.instance.prefer‐ip‐address=true


#拦截的地址
zuul.routes.spirng-boot-rabbitmq-sender.path=/user/**
#跳转的服务
zuul.routes.spirng-boot-rabbitmq-sender.serviceId=spirng-boot-rabbitmq-sender

这样在访问localhost:8080/user/**就会跳转到spirng-boot-rabbitmq-sender服务的/**地址了

zuul:
  host:
    socket-timeout-millis: 300000
    connect-timeout-millis: 300000
  routes:
    test:
      path: /test/**
      url: http://test-url.net

 

如果要想携带头信息转发,我是最新版本的springcloud,需要在配置文件配置
zuul默认过滤参数:

Authorization、Set-Cookie、Cookie、Host、Connection、Content-Length、Content-Encoding、Server、Transfer-Encoding、X-Application-Context

配置文件加上

zuul.sensitive-headers=Set-Cookie、Cookie、Host、Connection、Content-Length、Content-Encoding、Server、Transfer-Encoding、X-Application-Context

zuul过滤器

package com.gkl1120.eurekaclient1.filter;

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

import javax.servlet.http.HttpServletRequest;

/**
 * @author ctx_gao kailong
 * @date 2020/4/9 11:26
 */
@Component
public class MyZuulFilter extends ZuulFilter {
    @Override
    public String filterType() {
        //表示在之前过滤,一般都是之前,之后是post
        return "pre";
    }

    @Override
    public int filterOrder() {
        //过滤器执行顺序,0优先级最高
        return 0;
    }

    @Override
    public boolean shouldFilter() {
        //当前过滤器是否开启,true开启,false不开启
        return true;
    }

   /* 执行的内容
   返回任何值都继续执行
   加上
   RequestContext requestContext = RequestContext.getCurrentContext();
   requestContext.setSendZuulResponse(false);
   表示不再往下执行
    */
    @Override
    public Object run() throws ZuulException {
        RequestContext requestContext=RequestContext.getCurrentContext();
        HttpServletRequest request = requestContext.getRequest();
        String header = request.getHeader("Authorization");
        if(header != null && "".equals(header)){
           requestContext.addZuulRequestHeader("Authorization",header);
            //requestContext.addZuulRequestHeader("test",header);
            //这里有个贼有意思的地方,在配置文件中像上文一样配置,单独把Authorization放开,不管你把什么参数作为key加入header,就像这里放test,依旧会当做放的是Authorization
            //在转发后的服务接收到的依旧是Authorization与它的值,test的值为空,感兴趣的可以试下
        }
        return null;
    }
}

转自:https://blog.csdn.net/a1430490717/article/details/105404753/

posted @ 2021-02-05 15:42  一人一见  阅读(382)  评论(0编辑  收藏  举报