Zuul:Cookie和动态路由
程序员文章站
2022-06-03 18:57:34
...
经常会涉及到Cookie,在这里使用到了Zuul这个组件,Cookie它是无法传递过去的,我们先来实验一下,
看一下这个请求有没有带Cookie
localhost:8040/myProduct/product/list
@RestController
@RequestMapping("/product")
public class ProductController {
@Autowired
private ProductService productService;
/**
* 1. 查询所有在架的商品
*/
@GetMapping("/list")
public List<ProductInfo> list(HttpServletRequest Request) {
//1. 查询所有在架的商品
List<ProductInfo> productInfoList = productService.findUpAll();
return productInfoList;
}
}
从request里面传递过来
/**
* The service ID (if any) to map to this route. You can specify a physical URL or
* a service, but not both.
*/
private String serviceId;
他都是作为这个对象的一些字段,这里有两个字段
/**
* List of sensitive headers that are not passed to downstream requests. Defaults
* to a "safe" set of headers that commonly contain user credentials. It's OK to
* remove those from the list if the downstream service is part of the same system
* as the proxy, so they are sharing authentication data. If using a physical URL
* outside your own domain, then generally it would be a bad idea to leak user
* credentials.
*/
private Set<String> sensitiveHeaders = new LinkedHashSet<>();
敏感头,所谓敏感是不让看的,敏感头就不会给后面的服务了,默认值是什么
/**
* List of sensitive headers that are not passed to downstream requests. Defaults to a
* "safe" set of headers that commonly contain user credentials. It's OK to remove
* those from the list if the downstream service is part of the same system as the
* proxy, so they are sharing authentication data. If using a physical URL outside
* your own domain, then generally it would be a bad idea to leak user credentials.
*/
private Set<String> sensitiveHeaders = new LinkedHashSet<>(
Arrays.asList("Cookie", "Set-Cookie", "Authorization"));
默认对三个字段,Cookie这三个,那么我们现在想让他不过滤掉Cookie,你只需要把它设置为空就好了,
zuul.routes.myProduct.sensitiveHeaders=
这里报了一个错超时,因为我们打了一个断点,没关系,再来刷新一下,跳到打断点的地方,已经可以获取到cookie了
这就是敏感头的过滤,大家以后有需要的话加上这么一个配置,对于Zuul还有什么需要改进的呢,一旦我们再增加一个路由的
话,那我是不是得再配置一遍,我再重启一下,我们能不能做大动态路由呢,也就是改了配置直接让他生效,这不就是动态
配置吗,我们之前也有学到过,只要把这一块的配置放到Git上面来,名字叫api-gateway-dev.yml
我先全部复制过来,动态配置我们之前已经讲过,Zuul动态配置需要注意的点,第一点就是我们提到的,Spring Cloud Bus
版本问题,这边你得改一下,他在这个版本上有一些Bug,这是第一点,我们如何把这上面的配置改动了之后,你代码里面
要做到动态更新,创建一个ZuulConfig
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.cloud.netflix.zuul.filters.ZuulProperties;
import org.springframework.stereotype.Component;
@Component
public class ZuulConfig {
@ConfigurationProperties("zuul")
@RefreshScope
public ZuulProperties zuulProperties() {
return new ZuulProperties();
}
}
大家肯定想到了一个前缀,这个前缀,那里面怎么写呢,写哪些属性呢,其实你是不需要写属性的,Zuul已经写过了
有哪些属性,所以我们只需要查到他的属性,刚刚从属性里面点进去,这个类还在,其实就是这个类,跟我们的写法都是一样的
@Data
@ConfigurationProperties("zuul")
public class ZuulProperties {
org.springframework.cloud.netflix.zuul.filters.ZuulProperties
把这些配置写到这个类里面来,你只需要这么写,当然这个地方注意,你要把这些配置写到这儿来了,@RefreshScope,这样写
就可以完成动态注入,如果觉得没有必要新建一个类,你也可以这样子来写,把它复制一下,你可以直接写到启动类里面,
@EnableZuulProxy
@SpringBootApplication
public class APIGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(APIGatewayApplication.class, args);
}
@ConfigurationProperties("zuul")
@RefreshScope
public ZuulProperties zuulProperties() {
return new ZuulProperties();
}
}
这样子也是可以的,动态路由希望自己去实现
上一篇: GLUT函数库
下一篇: 二项式反演/minmax容斥初探