• 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/

  • 相关阅读:
    MySQL主库异常,从库手动切换为主库方案
    快速搭建应用服务日志收集系统(Filebeat + ElasticSearch + kibana)
    CentOS7设置DNS服务器
    nginx/iptables动态IP黑白名单实现方案
    Python批量复制和重命名文件
    centos 7 配置php运行环境 (新)
    配置Nginx和php-fpm用Sock套接字连接时,找不到php-fpm.sock的原因
    php-fpm nginx 9000端口
    nginx与php-fpm通信的两种方式
    centos 7.2 常用命令useradd的使用
  • 原文地址:https://www.cnblogs.com/personsiglewine/p/14378103.html
Copyright © 2020-2023  润新知