From 1aac46fa87f531fabb309d9e838e31b8e0363480 Mon Sep 17 00:00:00 2001 From: yhao3 Date: Sat, 28 Sep 2024 17:17:14 +0800 Subject: [PATCH] Fix Incorrect Pagination Links in Microservices When Forwarded Through Gateway --- generators/spring-boot/files.ts | 4 ---- .../_partials_entity_/get_all_template.ejs | 10 +++++----- .../_partials_entity_/search_template.ejs | 4 ++-- .../web/rest/PublicUserResource.java.ejs | 4 ++-- .../_entityPackage_/web/rest/UserResource.java.ejs | 4 ++-- .../web/rest/_entityClass_Resource.java.ejs | 2 +- .../src/main/resources/config/application-dev.yml.ejs | 2 ++ .../src/main/resources/config/application.yml.ejs | 3 +++ 8 files changed, 17 insertions(+), 16 deletions(-) diff --git a/generators/spring-boot/files.ts b/generators/spring-boot/files.ts index df7a95786646..a22964e3aa33 100644 --- a/generators/spring-boot/files.ts +++ b/generators/spring-boot/files.ts @@ -352,10 +352,6 @@ export const baseServerFiles = { }, ], serverMicroservice: [ - javaMainPackageTemplatesBlock({ - condition: generator => generator.applicationTypeMicroservice, - templates: ['config/SpringDocConfiguration.java'], - }), { condition: generator => generator.applicationTypeMicroservice, path: SERVER_MAIN_RES_DIR, diff --git a/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/_partials_entity_/get_all_template.ejs b/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/_partials_entity_/get_all_template.ejs index 4a2bdf643694..be76780c228a 100644 --- a/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/_partials_entity_/get_all_template.ejs +++ b/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/_partials_entity_/get_all_template.ejs @@ -35,7 +35,7 @@ _%> return ResponseEntity.ok().body(entityList); <%_ } else { _%> Page<<%= instanceType %>> page = <%= entityInstance %>QueryService.findByCriteria(criteria, pageable); - HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(<% if (!reactive) { %>ServletUriComponentsBuilder.fromCurrentRequest()<% } else { %>ForwardedHeaderUtils.adaptFromForwardedHeaders(request.getURI(), request.getHeaders())<% } %>, page); + HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(<% if (!reactive) { %>ServletUriComponentsBuilder.fromCurrentRequest()<% } else { %>UriComponentsBuilder.fromUri(request.getURI())<% } %>, page); return ResponseEntity.ok().headers(headers).body(page.getContent()); <%_ } _%> <%_ } else { _%> @@ -47,7 +47,7 @@ _%> ResponseEntity.ok() .headers( PaginationUtil.generatePaginationHttpHeaders( - ForwardedHeaderUtils.adaptFromForwardedHeaders(request.getURI(), request.getHeaders()), + UriComponentsBuilder.fromUri(request.getURI()), new PageImpl<>(countWithEntities.getT2(), pageable, countWithEntities.getT1()) ) ).body(countWithEntities.getT2()) @@ -104,7 +104,7 @@ _%> ResponseEntity.ok() .headers( PaginationUtil.generatePaginationHttpHeaders( - ForwardedHeaderUtils.adaptFromForwardedHeaders(request.getURI(), request.getHeaders()), + UriComponentsBuilder.fromUri(request.getURI()), new PageImpl<>(countWithEntities.getT2(), pageable, countWithEntities.getT1()) ) ).body(countWithEntities.getT2()) @@ -117,10 +117,10 @@ _%> } else { page = <%= entityInstance %><%= viaService ? 'Service' : 'Repository' %>.findAll(pageable)<%= reactiveEntityToDto %>; } - HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(<% if (reactive) { %>ForwardedHeaderUtils.adaptFromForwardedHeaders(request.getURI(), request.getHeaders())<% } else { %>ServletUriComponentsBuilder.fromCurrentRequest()<% } %>, page); + HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(<% if (reactive) { %>UriComponentsBuilder.fromUri(request.getURI())<% } else { %>ServletUriComponentsBuilder.fromCurrentRequest()<% } %>, page); <%_ } else { _%> Page<<%= instanceType %>> page = <%= entityInstance %><%= viaService ? 'Service' : 'Repository' %>.findAll(pageable)<%= reactiveEntityToDto %>; - HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(<% if (reactive) { %>ForwardedHeaderUtils.adaptFromForwardedHeaders(request.getURI(), request.getHeaders())<% } else { %>ServletUriComponentsBuilder.fromCurrentRequest()<% } %>, page); + HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(<% if (reactive) { %>UriComponentsBuilder.fromUri(request.getURI())<% } else { %>ServletUriComponentsBuilder.fromCurrentRequest()<% } %>, page); <%_ } _%> return ResponseEntity.ok().headers(headers).body(page.getContent()); <%_ } _%> diff --git a/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/_partials_entity_/search_template.ejs b/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/_partials_entity_/search_template.ejs index 408d601691cb..526bb7c8dcbb 100644 --- a/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/_partials_entity_/search_template.ejs +++ b/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/_partials_entity_/search_template.ejs @@ -34,7 +34,7 @@ if (paginationNo) { %> 'Service.' + (searchEngineElasticsearch ? 'searchCount' : 'countAll') : (searchEngineElasticsearch ? 'Search' : '') + 'Repository.count' %>() .map(total -> new PageImpl<>(new ArrayList<>(), pageable, total)) - .map(page -> PaginationUtil.generatePaginationHttpHeaders(ForwardedHeaderUtils.adaptFromForwardedHeaders(request.getURI(), request.getHeaders()), page)) + .map(page -> PaginationUtil.generatePaginationHttpHeaders(UriComponentsBuilder.fromUri(request.getURI()), page)) .map(headers -> ResponseEntity.ok().headers(headers).body(<%= entityInstance %><%= viaService ? 'Service' : (searchEngineElasticsearch ? 'Search' : '') + 'Repository' %>.search(query, pageable)<% if (!viaService && dtoMapstruct) { %>.map(<%= entityToDtoReference %>)<% } %>)); <%_ } else { _%> try { @@ -43,7 +43,7 @@ if (paginationNo) { %> <%_ } else { _%> Page<<%= persistClass %>> page = <%= entityInstance %><% if (searchEngineElasticsearch) { %>Search<% } %>Repository.search(query, pageable); <%_ } _%> - HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(<% if (reactive) { %>ForwardedHeaderUtils.adaptFromForwardedHeaders(request.getURI(), request.getHeaders())<% } else { %>ServletUriComponentsBuilder.fromCurrentRequest()<% } %>, page); + HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(<% if (reactive) { %>UriComponentsBuilder.fromUri(request.getURI())<% } else { %>ServletUriComponentsBuilder.fromCurrentRequest()<% } %>, page); return ResponseEntity.ok().headers(headers).body(<% if (!viaService && dtoMapstruct) { %><%= entityListToDtoListReference %>(<% } %>page.getContent()<% if (!viaService && dtoMapstruct) { %>)<% } %>); } catch (RuntimeException e) { <% if (searchEngineElasticsearch) { %> diff --git a/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/PublicUserResource.java.ejs b/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/PublicUserResource.java.ejs index d3091590891f..daffbc96544d 100644 --- a/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/PublicUserResource.java.ejs +++ b/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/PublicUserResource.java.ejs @@ -59,7 +59,7 @@ import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.web.bind.annotation.*; <%_ if (reactive) { _%> import org.springframework.web.server.ResponseStatusException; -import org.springframework.web.util.ForwardedHeaderUtils; +import org.springframework.web.util.UriComponentsBuilder; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; <%_ } else {_%> @@ -133,7 +133,7 @@ public class PublicUserResource { return userService.countManagedUsers() .map(total -> new PageImpl<>(new ArrayList<>(), pageable, total)) - .map(page -> PaginationUtil.generatePaginationHttpHeaders(ForwardedHeaderUtils.adaptFromForwardedHeaders(request.getURI(), request.getHeaders()), page)) + .map(page -> PaginationUtil.generatePaginationHttpHeaders(UriComponentsBuilder.fromUri(request.getURI()), page)) .map(headers -> ResponseEntity.ok().headers(headers).body(userService.getAllPublicUsers(pageable))); } <%_ } else { _%> diff --git a/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/UserResource.java.ejs b/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/UserResource.java.ejs index 5c59ff31644f..a0ecde2b3586 100644 --- a/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/UserResource.java.ejs +++ b/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/UserResource.java.ejs @@ -62,7 +62,7 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; <%_ if (reactive) { _%> import org.springframework.web.server.ResponseStatusException; -import org.springframework.web.util.ForwardedHeaderUtils; +import org.springframework.web.util.UriComponentsBuilder; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; <%_ } else { _%> @@ -288,7 +288,7 @@ public class UserResource { .map(total -> new PageImpl<>(new ArrayList<>(), pageable, total)) .map(page -> PaginationUtil.generatePaginationHttpHeaders( - ForwardedHeaderUtils.adaptFromForwardedHeaders(request.getURI(), request.getHeaders()), + UriComponentsBuilder.fromUri(request.getURI()), page ) ) diff --git a/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/_entityClass_Resource.java.ejs b/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/_entityClass_Resource.java.ejs index a3969cb51125..5e955f66d8f8 100644 --- a/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/_entityClass_Resource.java.ejs +++ b/generators/spring-boot/templates/src/main/java/_package_/_entityPackage_/web/rest/_entityClass_Resource.java.ejs @@ -77,7 +77,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.server.reactive.ServerHttpRequest; <%_ } _%> <%_ if (reactive) { _%> -import org.springframework.web.util.ForwardedHeaderUtils; +import org.springframework.web.util.UriComponentsBuilder; <%_ } else { _%> import org.springframework.web.servlet.support.ServletUriComponentsBuilder; <%_ } _%> diff --git a/generators/spring-boot/templates/src/main/resources/config/application-dev.yml.ejs b/generators/spring-boot/templates/src/main/resources/config/application-dev.yml.ejs index 8bf2eae20e9e..cc5fbca5f30d 100644 --- a/generators/spring-boot/templates/src/main/resources/config/application-dev.yml.ejs +++ b/generators/spring-boot/templates/src/main/resources/config/application-dev.yml.ejs @@ -209,8 +209,10 @@ spring: server: port: <%= serverPort %> +<%_ if (applicationTypeMonolith || applicationTypeGateway) { _%> # make sure requests the proxy uri instead of the server one forward-headers-strategy: native +<%_ } _%> # =================================================================== # JHipster specific properties diff --git a/generators/spring-boot/templates/src/main/resources/config/application.yml.ejs b/generators/spring-boot/templates/src/main/resources/config/application.yml.ejs index 6e136c5b6677..c7d449f45169 100644 --- a/generators/spring-boot/templates/src/main/resources/config/application.yml.ejs +++ b/generators/spring-boot/templates/src/main/resources/config/application.yml.ejs @@ -398,6 +398,9 @@ spring: console-available: true server: +<%_ if (applicationTypeMicroservice) { _%> + forward-headers-strategy: FRAMEWORK +<%_ } _%> servlet: session: cookie: