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

该文章描述了一个Java组件,实现了通过SpringCloudGateway全局过滤器GlobalFilter来读取请求头中的session_id_header,将对应的sessionId设置到Cookie中。当请求头包含session_id_header时,过滤器会创建一个新的请求,更新请求头并添加Cookie信息。
摘要由CSDN通过智能技术生成

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

}

当在网页中嵌套使用iframe时,可能会遇到一些问题,如样式冲突、无法调整大小、页面加载速度慢等。下面介绍一些解决iframe嵌套页面问题的方法。 首先,针对样式冲突问题,可以使用CSS命名空间(CSS Namespaces)来解决。通过添加命名空间前缀,可以确保不同iframe中的元素样式不会相互冲突。这样可以避免样式被覆盖,保证每个iframe中的样式独立。 其次,针对调整iframe大小问题,可以使用JavaScript来动态调整iframe的大小。通过监听iframe内部内容的高度变化,并将高度值传递给父页面,从而实现自适应调整iframe的大小。这样可以确保iframe始终能够显示完整的内容,提高用户体验。 另外,针对页面加载速度慢的问题,可以通过延迟加载或者懒加载来提升性能。即在页面初次加载时,只加载展示iframe的占位符,并不加载真正的内容。当用户需要查看或者操作iframe时,再加载对应的内容。这样可以减少初次加载的数据量,提高页面加载速度。 此外,还可以考虑使用无需iframe的其他技术来实现类似的功能,如Ajax、Vue.js等。这些技术可以通过异步加载内容或者组件来避免使用iframe,从而减少了嵌套页面问题。 综上所述,处理iframe嵌套页面问题需要使用CSS命名空间、动态调整大小、延迟加载或懒加载等方法。同时也可以考虑使用其他技术来避免使用iframe带来的问题。通过采取这些方法,可以更好地解决iframe嵌套页面问题,提升用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值