最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

頁(yè)面嵌入iframe Cookie丟失問(wèn)題以及解決過(guò)程

 更新時(shí)間:2026年02月07日 10:00:50   作者:花開(kāi)不識(shí)君  
文章介紹了在頁(yè)面嵌入iframe時(shí)遇到的cookie丟失問(wèn)題,提出了解決方案:后端將cookie以鏈接參數(shù)的形式傳遞給前端,前端在請(qǐng)求接口時(shí)將cookie放在請(qǐng)求頭中,后端通過(guò)攔截器解析并重新放置cookie

頁(yè)面嵌入iframe Cookie丟失問(wèn)題

遇到的問(wèn)題

自身頁(yè)面以iframe的形式嵌入三方頁(yè)面中,雙方域名不一致導(dǎo)致自身頁(yè)面的cookie被某些瀏覽器攔截?zé)o法正常被保存到客戶(hù)端

解決方案

  1. 后端將cookie以鏈接參數(shù)的形式帶給前端
  2. 前端在請(qǐng)求接口的時(shí)候?qū)ookie放在請(qǐng)求頭(這里無(wú)法直接在請(qǐng)求頭放置Cookie參數(shù),需要使用一個(gè)新的參數(shù)來(lái)放置Cookie)
  3. 后端使用攔截器獲獲取請(qǐng)求頭中Cookie副本解析后重新放置到Cookie中

后端部分實(shí)現(xiàn)示例代碼

解析獲取Response中的Cookie

// 從Response Header 中的 Set-Cookie解析
for (String cookie : response.getHeaders("Set-Cookie")) {
    cookie = cookie.split(";")[0];
    String[] split = cookie.split("=", 2);
    cookieMap.put(split[0], split[1]);
}

后端攔截器設(shè)置設(shè)置Coookie

@Component
@Order(1)
public class HeaderCookieFilter implements Filter {

    private static final Logger log = LoggerFactory.getLogger(HeaderCookieFilter.class);
    private final String HEADER_COOKIE_KEY = "identityKey";

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        try {
            HttpServletRequestWrapper customRequest = (HttpServletRequestWrapper)request;
            JSONObject cookieInfo = check(request);
            //如果校驗(yàn)通過(guò)
            if(cookieInfo!=null) {
                Cookie[] cookies = new Cookie[cookieInfo.size()];
                // 修改cookie
                Iterator<String> iterator = cookieInfo.keySet().iterator();
                for (int i = 0; i < cookieInfo.keySet().size(); i++) {
                    String key = iterator.next();
                    String value = cookieInfo.getString(key);
                    Cookie cookie = new Cookie(key, value);
                    cookies[i] = cookie;
                }
                request = new CustomRequest(customRequest, cookies);
            }
        }catch (Exception e){
            log.error("header transfor cookie error",e);
        }
        chain.doFilter(request,response);
    }

    @Override
    public void destroy() {
    }

    private JSONObject check(ServletRequest request) throws UnsupportedEncodingException {
        HttpServletRequestWrapper customRequest = (HttpServletRequestWrapper)request;
        // 不存在identityKey請(qǐng)求頭,直接跳過(guò)
        String allCookieStrEncode = customRequest.getHeader(HEADER_COOKIE_KEY);
        boolean hasHeaderCookie = StringUtils.isNotEmpty(allCookieStrEncode);
        if(!hasHeaderCookie){
            return null;
        }
        String cookieStr = URLDecoder.decode(allCookieStrEncode, CharEncoding.UTF_8);
        JSONObject cookieInfo = JSON.parseObject(cookieStr);
        return cookieInfo;
    }
    class CustomRequest extends HttpServletRequestWrapper {
        Cookie[] cookies;
        public CustomRequest(HttpServletRequest request, Cookie[] cookies) {
            super(request);
            this.cookies = cookies;
        }
        @Override
        public Cookie[] getCookies(){
            return cookies;
        }
    }
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java微信公眾號(hào)支付示例詳解

    java微信公眾號(hào)支付示例詳解

    這篇文章主要為大家詳細(xì)介紹了java微信公眾號(hào)支付示例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • 對(duì)Java字符串與整形、浮點(diǎn)類(lèi)型之間的相互轉(zhuǎn)換方法總結(jié)

    對(duì)Java字符串與整形、浮點(diǎn)類(lèi)型之間的相互轉(zhuǎn)換方法總結(jié)

    今天小編就為大家分享一篇對(duì)Java字符串與整形、浮點(diǎn)類(lèi)型之間的相互轉(zhuǎn)換方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • springboot實(shí)現(xiàn)自動(dòng)郵件發(fā)送任務(wù)詳解

    springboot實(shí)現(xiàn)自動(dòng)郵件發(fā)送任務(wù)詳解

    這篇文章主要介紹了Springboot中的郵件任務(wù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2022-04-04
  • springBoot的日志文件詳解

    springBoot的日志文件詳解

    日志是程序的重要組成部分,主要可以用來(lái)定位和排查問(wèn)題,在程序中進(jìn)行自定義日志輸出的時(shí)候,也通常是借助于SLF4J框架來(lái)輸出日志,本文給大家分享springBoot的日志文件相關(guān)知識(shí),感興趣的朋友一起看看吧
    2024-06-06
  • mybatis generator只能生成insert和selectAll的操作

    mybatis generator只能生成insert和selectAll的操作

    這篇文章主要介紹了mybatis generator只能生成insert和selectAll的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • JAVA 區(qū)分集合和數(shù)組

    JAVA 區(qū)分集合和數(shù)組

    這篇文章主要介紹了JAVA如何區(qū)分集合和數(shù)組,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • java如何使用ftp下載遠(yuǎn)程服務(wù)器文件

    java如何使用ftp下載遠(yuǎn)程服務(wù)器文件

    Java通過(guò)FTP下載文件主要有兩種方式:第一種是直接在連接中包含賬號(hào)和密碼進(jìn)行遠(yuǎn)程下載;第二種是登錄后使用賬號(hào)和密碼進(jìn)行下載,這些方法適用于需要從遠(yuǎn)程服務(wù)器獲取文件的場(chǎng)景
    2024-11-11
  • springboot登錄攔截器+ThreadLocal實(shí)現(xiàn)用戶(hù)信息存儲(chǔ)的實(shí)例代碼

    springboot登錄攔截器+ThreadLocal實(shí)現(xiàn)用戶(hù)信息存儲(chǔ)的實(shí)例代碼

    ThreadLocal 為變量在每個(gè)線程中創(chuàng)建了一個(gè)副本,這樣每個(gè)線程都可以訪問(wèn)自己內(nèi)部的副本變量,這篇文章主要介紹了springboot登錄攔截器+ThreadLocal實(shí)現(xiàn)用戶(hù)信息存儲(chǔ)的實(shí)例代碼,需要的朋友可以參考下
    2024-03-03
  • Java?AQS中ReentrantLock條件鎖的使用

    Java?AQS中ReentrantLock條件鎖的使用

    ReentrantLock繼承了Lock接口,?lock方法實(shí)際上是調(diào)用了Sync的子類(lèi)NonfairSync(非公平鎖)的lock方法。ReentrantLock的真正實(shí)現(xiàn)在他的兩個(gè)內(nèi)部類(lèi)NonfairSync和FairSync中,默認(rèn)實(shí)現(xiàn)是非公平鎖
    2023-02-02
  • ZooKeeper官方文檔之Java客戶(hù)端開(kāi)發(fā)案例翻譯

    ZooKeeper官方文檔之Java客戶(hù)端開(kāi)發(fā)案例翻譯

    網(wǎng)上有很多ZooKeeper的java客戶(hù)端例子,我也看過(guò)很多,不過(guò)大部分寫(xiě)的都不好,有各種問(wèn)題。兜兜轉(zhuǎn)轉(zhuǎn)還是覺(jué)得官方給的例子最為經(jīng)典,在學(xué)習(xí)之余翻譯下來(lái),供朋友們參考
    2022-01-01

最新評(píng)論

丹凤县| 循化| 福州市| 永定县| 西宁市| 东平县| 靖远县| 宝山区| 盖州市| 江安县| 巴中市| 隆安县| 威宁| 朝阳市| 于都县| 江永县| 泰州市| 沽源县| 太谷县| 大宁县| 常州市| 新干县| 天气| 且末县| 桐梓县| 会东县| 思茅市| 华蓥市| 虎林市| 任丘市| 永登县| 上栗县| 建平县| 宣恩县| 遂川县| 湄潭县| 平阴县| 文昌市| 抚松县| 临洮县| 屏南县|