mirror of https://github.com/halo-dev/halo
Set property server.forward-header-strategy to framework by default (#3709)
#### What type of PR is this?
/kind bug
/area core
#### What this PR does / why we need it:
Set property `server.forward-header-strategy` to `framework` to enable handling `X-Forwarded*` headers correctly.
By default, Spring won't handle `X-Forwarded*` headers. It doesn't work correctly if Halo is running back reverse proxy server.
Supported headers: <310344cf61/spring-web/src/main/java/org/springframework/web/server/adapter/ForwardedHeaderTransformer.java (L63-L69)
>.
#### Which issue(s) this PR fixes:
Fixes https://github.com/halo-dev/halo/issues/3670
#### Does this PR introduce a user-facing change?
```release-note
解决反向代理后无法正确获取当前请求 URI 的问题
```
pull/3727/head
parent
b99222e176
commit
bfe8b3ba58
|
@ -1,5 +1,6 @@
|
||||||
server:
|
server:
|
||||||
port: 8090
|
port: 8090
|
||||||
|
forward-headers-strategy: framework
|
||||||
compression:
|
compression:
|
||||||
enabled: true
|
enabled: true
|
||||||
error:
|
error:
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
package run.halo.app;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT;
|
||||||
|
import static org.springframework.web.reactive.function.server.RequestPredicates.GET;
|
||||||
|
import static org.springframework.web.reactive.function.server.RouterFunctions.route;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.boot.test.context.TestConfiguration;
|
||||||
|
import org.springframework.boot.test.web.server.LocalServerPort;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.web.reactive.function.client.WebClient;
|
||||||
|
import org.springframework.web.reactive.function.server.RouterFunction;
|
||||||
|
import org.springframework.web.reactive.function.server.ServerResponse;
|
||||||
|
import reactor.test.StepVerifier;
|
||||||
|
|
||||||
|
@SpringBootTest(webEnvironment = RANDOM_PORT,
|
||||||
|
properties = "server.forward-headers-strategy=framework")
|
||||||
|
class XForwardHeaderTest {
|
||||||
|
|
||||||
|
@LocalServerPort
|
||||||
|
int port;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldGetCorrectProtoFromXForwardHeaders() {
|
||||||
|
var response = WebClient.create("http://localhost:" + port)
|
||||||
|
.get().uri("/print-uri")
|
||||||
|
.header("X-Forwarded-Proto", "https")
|
||||||
|
.header("X-Forwarded-Host", "halo.run")
|
||||||
|
.header("X-Forwarded-Port", "6666")
|
||||||
|
.retrieve()
|
||||||
|
.toEntity(String.class);
|
||||||
|
StepVerifier.create(response)
|
||||||
|
.assertNext(entity -> {
|
||||||
|
assertEquals(HttpStatus.OK, entity.getStatusCode());
|
||||||
|
assertEquals("\"https://halo.run:6666/print-uri\"", entity.getBody());
|
||||||
|
})
|
||||||
|
.verifyComplete();
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestConfiguration
|
||||||
|
static class Configuration {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
RouterFunction<ServerResponse> printUri() {
|
||||||
|
return route(GET("/print-uri"),
|
||||||
|
request -> {
|
||||||
|
var uri = request.exchange().getRequest().getURI();
|
||||||
|
return ServerResponse.ok().bodyValue(uri);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue