zuul转发后服务取不到请求路径的解决
zuul转发后服务取不到请求路径
问题
希望通过获取不同的路径中的项⽬名,动态设置数据源,但是经过zuul⽹关后,在后⾯的服务中获取不到请求路径。
解决
通过Header:x-forwarded-prefix获取
测试代码:
@GetMapping("/a")
public String a(HttpServletRequest request) {
StringBuilder result = new StringBuilder();
result.append("getMethod:" + Method() + "\n\r");
result.append("getRequestURL:" + RequestURL() + "\n\r");
result.append("getServletPath:" + ServletPath() + "\n\r");
result.append("getContextPath:" + ContextPath() + "\n\r");
result.append("getPathInfo:" + PathInfo() + "\n\r");
result.append("---------------------------------------------------" + "\n\r");
Enumeration<String> es = HeaderNames();
while (es.hasMoreElements()) {
result.Element() + ":" + Element()) + "\n\r");
}
String();
}
返回结果:
路径中标红的地⽅,和x-forwarded-prefix头部⾥的内容是⼀样的,所以使⽤Header('x-forwarded-prefix')就可以获取到当前访问的项⽬,然后做区分。思考
zuul 地址转发问题
最近在学习spring cloud,使⽤zuul过程中发现地址并没转发成功,页⾯⼀直报错404.
使⽤的Spring cloud版本为最新版Greenwich
zuul中配置⽂件内容是
server:
port: 8180
spring:
application:
name: zuul-test
zuul:
routes:
hello:
最新版idea安装详细教程path: /hello/**
url: localhost:9180/
开始以为是Spring cloud版本太⾼,就把纯洁的微笑博客中的demo下载下来测试,发现依然如此。
所以将配置更改如下:
server:
port: 8180
spring:
application:
name: zuul-test
zuul:
routes:
hello:
path: /hello/**
url: localhost:9180/hello
请求跳转成功。
毕竟是⾃⼰的猜测,还是需要代码⽀持,所以断点,调试源码进⼊查看.
在org.springframework.cloudflix.ute.SimpleHostRoutingFilter#run⽅法中通过
String uri = this.helper.buildZuulRequestURI(request);
解析出uri=“”,然后通过当前类中的forward⽅法组织请求参数并转发.
源码如下
重要是图中红框部分,如果你的转发地址没有带上上下⽂,Path()获取的值将为"",与之前获取的uri拼接后为"".通过323⾏
buildHttpRequest(verb, uri, entity, headers, params,request);
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论