По словам пользователя на сайте PHP.net , его попытки сохранить сеанс не удалось, поэтому ему пришлось сделать обходное решение.
В папке SessionData это будут сохранены текстовые файлы для хранения информации о сеансе, каждый файл будет иметь имя, похожее на «sess_a_big_hash_here».
Вы можете использовать ServerHttpRequest
в качестве параметра метода для получения uri
:
@RestController
public class GreetingController {
@GetMapping("/greeting")
public Mono<Greeting> getGreeting(ServerHttpRequest serverHttpRequest) {
return Mono.just(new Greeting("greeting", serverHttpRequest.getURI().toString()));
}
}
Предпочтительно
blockquote>linkToCurrentResource
должен понимать заголовкиX-Forwarded-???
, если работает за балансировщиком нагрузки.Затем вы можете выставить
ForwardedHeaderTransformer
@Bean
.Из документации:
Извлечь значения из заголовков «
blockquote>Forwarded
» и «X-Forwarded-*
», чтобы переопределить запросURI
(то естьHttpRequest.getURI()
), чтобы он отражал составленный протокол и адрес.@Configuration open class MvcConfig { @Bean open fun forwardedHeaderTransformer() = ForwardedHeaderTransformer() }
Вот несколько тестов:
@ExtendWith(SpringExtension::class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, properties = ["server.port=4333"]) class GreetingController2Test { @Autowired private lateinit var restTemplate: TestRestTemplate @Test fun `should return uri`() { val responseEntity = restTemplate.getForEntity("/greeting", Greeting::class.java) val greeting = responseEntity.body!! assertEquals("http://localhost:4333/greeting", greeting.uri) } @Test fun `should return uri composed from forwarded-??? headers`() { val headers = HttpHeaders() headers["X-Forwarded-Host"] = "external-uri.com" headers["X-Forwarded-Proto"] = "https" headers["X-Forwarded-Prefix"] = "/prefix" val httpEntity = HttpEntity(null, headers) val responseEntity = restTemplate.exchange("/greeting", HttpMethod.GET, httpEntity, Greeting::class.java) val greeting = responseEntity.body!! assertEquals("https://external-uri.com/prefix/greeting", greeting.uri) } }
И
Greeting.kt
:data class Greeting( val g: String? = null, val uri: String? = null )