天天看點

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服務的/**位址了

如果要想攜帶頭資訊轉發,我是最新版本的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;
    }
}
           

繼續閱讀