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;
    }
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Spring Cloud是一个开源的微服务框架,它提供了一系列的工具和组件,用于构建分布式系统中的各个微服务。其中包括服务注册与发现、配置中心、网关服务调用等功能。 服务注册与发现是Spring Cloud中的一个重要组件,它使用Eureka作为服务注册中心。通过在微服务中引入依赖org.springframework.cloud:spring-cloud-starter-eureka,可以实现将微服务注册到Eureka服务器上。\[1\] 配置中心是用于集中管理微服务的配置信息的组件。在Spring Cloud中,可以使用Spring Cloud Config来实现配置中心的功能。通过在微服务中引入依赖org.springframework.cloud:spring-cloud-starter-config,可以将配置信息存储在配置中心,并在微服务启动时从配置中心获取配置信息ZuulSpring Cloud中的网关组件,它可以实现请求的路由、负载均衡、过滤等功能。在微服务中引入依赖org.springframework.cloud:spring-cloud-starter-zuul,使用@EnableZuulProxy注解开启Zuul网关。\[2\]\[3\] Feign是Spring Cloud中的服务调用组件,它可以简化微服务之间的调用过程。通过在微服务中引入依赖org.springframework.cloud:spring-cloud-starter-feign,可以使用Feign来定义和实现服务之间的调用接口。 综上所述,Spring Cloud提供了服务注册与发现、配置中心、网关服务调用等功能,可以帮助开发者构建和管理分布式系统中的微服务。 #### 引用[.reference_title] - *1* *3* [非常全面的讲解SpringCloudZuul网关原理及其配置,看它就够了!](https://blog.csdn.net/bishe_teacher/article/details/107844103)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [全面的讲解SpringCloudZuul网关原理及其配置,看它就够了](https://blog.csdn.net/Cr1556648487/article/details/126543111)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值