HATEOAS paths are invalid when using an API Gateway in a Spring Boot app

给你一囗甜甜゛ 提交于 2019-11-29 02:16:55

Zuul or Spring-Cloud adds the "X-Forwarded-Host" header to all the forwarded requests, which Spring-hateoas respects and modifies the links appropriately. To quote from Spring-Cloud docs:

The X-Forwarded-Host header added to the forwarded requests by default. To turn it off set zuul.addProxyHeaders = false. The prefix path is stripped by default, and the request to the backend picks up a header "X-Forwarded-Prefix" ("/myusers" in the examples above).

You can try the recommended fix, which is to set the zuul.addProxyHeaders=false

I had exactly the same problem. Change your config as follows:

zuul:
  routes:
    profiles:
      path: /profiles/**
      url: http://localhost:8083
      stripPrefix: false

This routes all requests going to the gateway matching "/profiles/**" to your back end server "http://localhost:8083" and leaves the prefix (in your case "/profiles" since that's what matched the route).

Zuul forwards to the /profiles contextPath.

Try setting this as configuration:

zuul:
  routes:
    profiles:
      path: /profiles/**
      url: http://localhost:8083/

After struggling some time with the same problem, finally I've tried zuul.addProxyHeaders = true and it works! Links are not broken anymore.

In the demo app I used for SpringOne in my talk about Spring Data REST, I have the following configuration to both handle URI rewrites as well as adjust prefix headers set properly.

zuul:
  routes:
    api:
      path: /api/**
      serviceId: spring-a-gram-backend
      stripPrefix: false
    files:
      path: /files/**
      serviceId: spring-a-gram-mongodb-fileservice
      stripPrefix: false

See it in full at https://github.com/gregturn/spring-a-gram/blob/master/spring-a-gram-frontend/src/main/resources/application.yml#L23-L32

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!