通过网关强制设置对应会话id即可,sessionId可通过请求头得方式传入,然后网关再把请求头sessionId设置到cookie中
package com.gateway.filter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpHeaders;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpRequestDecorator;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.net.URI;
import java.util.List;
@Component
public class SetCookieGlobalFilter implements GlobalFilter, Ordered {
String cookieName = "SESSION_ID";
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest oldRequest= exchange.getRequest();
HttpHeaders oldRequestHeaders = oldRequest.getHeaders();
List<String> authorization = oldRequestHeaders.get("session_id_header");
if(CollectionUtils.isEmpty(authorization)){
return chain.filter(exchange);
}else{
String sessionId = authorization.get(0);
URI uri = oldRequest.getURI();
ServerHttpRequest newRequest = oldRequest.mutate().uri(uri).build();
// 定义新的消息头
HttpHeaders headers = new HttpHeaders();
headers.putAll(oldRequestHeaders);
headers.remove(HttpHeaders.COOKIE);
headers.set(HttpHeaders.COOKIE, "NETINFO_SESSION_ID="+sessionId);
newRequest = new ServerHttpRequestDecorator(newRequest) {
@Override
public HttpHeaders getHeaders() {
return headers;
}
};
return chain.filter(exchange.mutate().request(newRequest).build());
}
}
@Override
public int getOrder() {
return -2;
}
}