Browse Source

Fix adding cookies. Update docs.

pull/867/head
Olga Maciaszek-Sharma 4 years ago
parent
commit
8739f8c233
  1. 2
      docs/src/main/asciidoc/spring-cloud-commons.adoc
  2. 20
      spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/RequestData.java

2
docs/src/main/asciidoc/spring-cloud-commons.adoc

@ -1019,6 +1019,8 @@ For that functionality, it is useful to have the selected service instance (whic @@ -1019,6 +1019,8 @@ For that functionality, it is useful to have the selected service instance (whic
By default, the name of the cookie is `sc-lb-instance-id`. You can modify it by changing the value of the `spring.cloud.loadbalancer.instance-id-cookie-name` property.
WARNING: Passing the selected service instance id as a cookie is currently only supported for the reactive `@LoadBalanced Webclient`, `ReactorLoadBalancerExchangeFilterFunction` and `RetryableLoadBalancerExchangeFilterFunction`.
[[spring-cloud-loadbalancer-hints]]
=== Spring Cloud LoadBalancer Hints

20
spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/RequestData.java

@ -65,22 +65,30 @@ public class RequestData { @@ -65,22 +65,30 @@ public class RequestData {
}
public RequestData(HttpRequest request) {
this(request.getMethod(), request.getURI(), request.getHeaders(), null, new HashMap<>());
this(request.getMethod(), request.getURI(), request.getHeaders(), buildCookiesFromHeaders(request.getHeaders()),
new HashMap<>());
}
public RequestData(ServerHttpRequest request) {
this(request.getMethod(), request.getURI(), request.getHeaders(),
buildCookies(request.getCookies(), request.getHeaders()), new HashMap<>());
this(request.getMethod(), request.getURI(), request.getHeaders(), buildCookies(request.getCookies()),
new HashMap<>());
}
private static MultiValueMap<String, String> buildCookies(MultiValueMap<String, HttpCookie> cookies,
HttpHeaders headers) {
private static MultiValueMap<String, String> buildCookies(MultiValueMap<String, HttpCookie> cookies) {
HttpHeaders newCookies = new HttpHeaders();
if (cookies != null) {
cookies.forEach((key, value) -> value
.forEach(cookie -> newCookies.put(cookie.getName(), Collections.singletonList(cookie.getValue()))));
}
List<String> cookiesFromHeaders = headers.get("cookie");
return newCookies;
}
private static MultiValueMap<String, String> buildCookiesFromHeaders(HttpHeaders headers) {
HttpHeaders newCookies = new HttpHeaders();
if (headers == null) {
return newCookies;
}
List<String> cookiesFromHeaders = headers.get(HttpHeaders.COOKIE);
if (cookiesFromHeaders != null) {
cookiesFromHeaders.forEach(cookie -> {
String[] splitCookie = cookie.split("=");

Loading…
Cancel
Save