[SPRING] Spring Boot 앱에서 API 게이트웨이를 사용할 때 HATEOAS 경로가 유효하지 않습니다.
SPRINGSpring Boot 앱에서 API 게이트웨이를 사용할 때 HATEOAS 경로가 유효하지 않습니다.
나는 그들 중 하나가 API 게이트웨이로 행동하는 두 개의 스프링 부트 애플리케이션을 가지고있다. 첫 번째 파일에 연결된 다른 파일은 spring-data-rest (spring-data-neo4j-rest)를 사용하여 프로필 서비스를 노출하고 있습니다.
첫 번째 애플리케이션은 8080 포트에서 시작하고 zuul을 사용하여 다음과 같이 두 번째 요청으로 요청을 라우팅합니다.
zuul:
routes:
profiles:
path: /profiles/**
url: http://localhost:8083/profiles/
이 모든 것은 잘 작동하고 http : // localhost : 8080 / profiles에 대한 요청이 두 번째 앱에서 제공되고 있습니다. 그러나 문제는 응답의 HATEOAS 링크가 올바르지 않다는 것입니다. 두 번째 서비스를 호출 한 응답이 올바른 것입니다.
{
"_links": {
"self": {
"href": "http://localhost:8083/profiles{?page,size,sort}",
"templated": true
},
"search": {
"href": "http://localhost:8083/profiles/search"
}
},
"_embedded": {
"profiles": [
{
"name": "Andrew Rutter",
"_links": {
"self": {
"href": "http://localhost:8083/profiles/0"
}
}
},
{
"name": "Andrew Rutter",
"_links": {
"self": {
"href": "http://localhost:8083/profiles/1"
}
}
}
]
},
"page": {
"size": 20,
"totalElements": 2,
"totalPages": 1,
"number": 0
}
}
하지만 이것이 내 API 게이트웨이로 돌아 오면 링크가 다음으로 다시 작성됩니다.
{
"name": "Andrew Rutter",
"_links": {
"self": {
"href": "http://localhost:8080/profiles/profiles/0"
}
}
}
게이트웨이 경로 별칭에 실제 서비스 기반 인 Uri을 더한 것입니다. 그 행동을 막기 위해 zuul 옵션을 놓치고 호스트 조정으로 hateoas uri를 그대로 두십시오. 아니면 게이트웨이 뒤에있는 내 서비스가 / profiles (이 경우)의 기본 리소스 끝점에 연결되어 바람직하지 않은 경로가 추가되는 것을 방지 할 수있는 방법이 있습니다.
감사!
해결법
-
==============================
1.Zuul 또는 Spring-Cloud는 모든 전달 요청에 "X-Forwarded-Host"헤더를 추가합니다. Spring-hateoas는 링크를 적절히 존중하고 수정합니다. Spring-Cloud 문서에서 인용하기 :
Zuul 또는 Spring-Cloud는 모든 전달 요청에 "X-Forwarded-Host"헤더를 추가합니다. Spring-hateoas는 링크를 적절히 존중하고 수정합니다. Spring-Cloud 문서에서 인용하기 :
zuul.addProxyHeaders = false를 설정하는 것이 좋습니다 권장 수정을 시도 할 수 있습니다
-
==============================
2.나는 똑같은 문제가 있었다. 다음과 같이 구성을 변경하십시오.
나는 똑같은 문제가 있었다. 다음과 같이 구성을 변경하십시오.
zuul: routes: profiles: path: /profiles/** url: http://localhost:8083 stripPrefix: false
이렇게하면 "/ profiles / **"와 일치하는 게이트웨이로가는 모든 요청이 백엔드 서버 "http : // localhost : 8083"로 라우팅되고 접두사가 경로와 일치하는 "/ profiles"에 있습니다.
-
==============================
3.Zuul은 / profiles contextPath로 전달합니다.
Zuul은 / profiles contextPath로 전달합니다.
구성으로 설정해보십시오.
zuul: routes: profiles: path: /profiles/** url: http://localhost:8083/
-
==============================
4.같은 문제로 고생하고 나서, 마침내 zuul.addProxyHeaders = true로 시도해 보았습니다! 링크가 더 이상 손상되지 않습니다.
같은 문제로 고생하고 나서, 마침내 zuul.addProxyHeaders = true로 시도해 보았습니다! 링크가 더 이상 손상되지 않습니다.
-
==============================
5.Spring Data REST에 대한 이야기에서 SpringOne에 사용한 데모 응용 프로그램에서 URI 재 작성을 처리하고 접두사 헤더를 올바르게 조정하는 다음 구성을 사용했습니다.
Spring Data REST에 대한 이야기에서 SpringOne에 사용한 데모 응용 프로그램에서 URI 재 작성을 처리하고 접두사 헤더를 올바르게 조정하는 다음 구성을 사용했습니다.
zuul: routes: api: path: /api/** serviceId: spring-a-gram-backend stripPrefix: false files: path: /files/** serviceId: spring-a-gram-mongodb-fileservice stripPrefix: false
https://github.com/gregturn/spring-a-gram/blob/master/spring-a-gram-frontend/src/main/resources/application.yml#L23-L32에서 전체 내용을 확인하십시오.
from https://stackoverflow.com/questions/30584242/hateoas-paths-are-invalid-when-using-an-api-gateway-in-a-spring-boot-app by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] HiddenHttpMethodFilter가 활성화 된 후 Spring MVC 3.0.2를 사용하여 여러 파일 업로드하기 (0) | 2019.02.08 |
---|---|
[SPRING] Spring AOP : 인수 이름에 접근하기 (0) | 2019.02.08 |
[SPRING] Spring Security SAML + HTTPS를 다른 페이지로 (0) | 2019.02.08 |
[SPRING] 다중 컨텍스트에서 속성을 찾을 수 없습니다 : property-placeholder (0) | 2019.02.08 |
[SPRING] 한 데이터베이스에서 다른 데이터베이스로 데이터를 복사 할 때 org.hibernate.StaleObjectStateException을 해결하는 방법은 무엇입니까? (0) | 2019.02.08 |