Rumah >Java >javaTutorial >Bagaimana untuk menyelesaikan masalah Ajax silang domain dan kegagalan kuki untuk mendapatkan dan kalah dalam SpringBoot

Bagaimana untuk menyelesaikan masalah Ajax silang domain dan kegagalan kuki untuk mendapatkan dan kalah dalam SpringBoot

王林
王林ke hadapan
2023-05-26 09:56:131604semak imbas

Apabila menulis halaman pendaftaran log masuk projek saya, kerana fungsi pendaftaran dan penukaran kata laluan saya menggunakan pengesahan e-mel, apabila menghantar kod pengesahan, bahagian belakang akan menambah kuki pada data respons

Cookie cookie = new Cookie(toEmail.split("@")[0],verCode);
cookie.setMaxAge(30*60);
response.addCookie(cookie);

dan kemudian Apabila anda klik untuk mendaftar atau menukar kata laluan anda, bahagian belakang akan memperoleh kuki daripada permintaan untuk mendapatkan maklumat e-mel dan kod pengesahan

Cookie[] cookies = request.getCookies();

Apabila menguji secara setempat, kuki boleh ditambah dengan betul pada respons dan diperoleh dengan betul

Bagaimana untuk menyelesaikan masalah Ajax silang domain dan kegagalan kuki untuk mendapatkan dan kalah dalam SpringBoot

Bagaimana untuk menyelesaikan masalah Ajax silang domain dan kegagalan kuki untuk mendapatkan dan kalah dalam SpringBoot

Tetapi apabila saya membungkus projek ke awan dan kemudian melakukan akses ajax, masalah telah berlaku.

Terdapat set-Cookie dengan jelas dalam pengepala respons, tetapi Cookie tidak boleh ditemui dalam pengepala permintaan kedua

Pelayan gagal mendapatkan kuki dan melaporkan ralat Fungsi menggunakan kuki untuk mendaftar dan menukar kata laluan tidak sah Selepas mencari dokumen, saya mendapati ralat itu berasal daripada masalah kehilangan kuki merentas domain springboot dan ajax Memandangkan saya baru menggunakan bahagian belakang,

Saya hanya menyiarkan penyelesaian saya di sini

1. Permintaan ajax perlu membawa

xmlhttp.withCredentials = true; Control-Allow-Origin" kawalan akses sumber dibenarkan, maklumat pengepala permintaan http, tetapkan perkongsian sumber yang dibenarkan (cross-domain) ) Sumber

var xmlhttp = new XMLHttpRequest();
xmlhttp.withCredentials = true;
xmlhttp.open("GET", readyUrl, true);
xmlhttp.send();

nilai

ialah request.getHeader("Origin" ), yang mewakili

protokol dan nama domain

gabungan halaman di mana sumber yang diminta pada masa ini terletak Bersama-sama ia bermaksud

Membenarkan sumber yang diminta semasa mengakses sumber belakang merentasi domain

Selepas menetapkan ketiga-tiga ini, saya boleh mendapatkan kuki semula

2022 -12-09 Kemas Kini:

Menemui yang lebih ringkas dan kaedah yang mudah untuk menambah penapis permintaan merentas domain

Menggunakan kaedah StringUtils.isEmpty bagi pakej pergantungan kumpulan data Druid , jika ralat dilaporkan, tulis sahaja pengganti sendiri

package com.crisp.myblog.config;
 
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
 
@Configuration
public class corsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                //是否发送Cookie
                .allowCredentials(true)
                //放行哪些原始域
                .allowedOriginPatterns("这里填你前端代码所在的域名:端口")
                .allowedMethods(new String[]{"GET", "POST", "PUT", "DELETE"})
                .allowedHeaders("*")
                .exposedHeaders("*");
    }
}

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah Ajax silang domain dan kegagalan kuki untuk mendapatkan dan kalah dalam SpringBoot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam