iframe嵌套页面,由于同源策略导致cookie无法获取,导致会话session失效问题得解决方案

通过网关强制设置对应会话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;
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_41796956/article/details/130284164