Heim >Java >javaLernprogramm >So lösen Sie das Problem des domänenübergreifenden Ajax- und Cookie-Fehlers beim Abrufen und Verlieren in SpringBoot

So lösen Sie das Problem des domänenübergreifenden Ajax- und Cookie-Fehlers beim Abrufen und Verlieren in SpringBoot

王林
王林nach vorne
2023-05-26 09:56:131615Durchsuche

Wenn ich die Login-Registrierungsseite meines Projekts schreibe, fügt das Backend beim Senden des Bestätigungscodes ein Cookie zu den Antwortdaten hinzu, da meine Registrierungs- und Passwortänderungsfunktionen eine E-Mail-Verifizierung verwenden.

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

Klicken Sie dann, um sich zu registrieren oder das Passwort zu ändern. Beim Testen , das Backend erhält das Cookie aus der Anfrage, um die E-Mail- und Bestätigungscode-Informationen zu erhalten Das Projekt Nach dem Wechsel in die Cloud ist beim Ausführen des Ajax-Zugriffs ein Problem aufgetreten! Cookies und meldete einen Fehler. Nach der Suche nach Dokumenten wurde festgestellt, dass der Fehler auf das domänenübergreifende Cookie-Verlustproblem von Springboot und Ajax zurückzuführen ist , ich werde hier nur posten

1. Die Ajax-Anfrage muss

xmlhttp.withCredentials = true;

So lösen Sie das Problem des domänenübergreifenden Ajax- und Cookie-Fehlers beim Abrufen und Verlieren in SpringBoot

Cookie[] cookies = request.getCookies();

2 Fehler)

var xmlhttp = new XMLHttpRequest();
xmlhttp.withCredentials = true;
xmlhttp.open("GET", readyUrl, true);
xmlhttp.send();
So lösen Sie das Problem des domänenübergreifenden Ajax- und Cookie-Fehlers beim Abrufen und Verlieren in SpringBoot3. Geben Sie die Antwort in der API im Controller ein, legen Sie den Antwortheader fest, der

-Schlüssel

ist „Access-Control-Allow-Origin“, die für die Zugriffskontrolle zulässige Quelle, http-Anfrage-Header-Informationen, legen Sie die Quelle fest

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("*");
    }
}

Wert, der die gemeinsame Nutzung von Ressourcen (domänenübergreifend)

ermöglicht, ist request.getHeader("Origin"), der

den Protokoll- und Domänennamen

der Seite

darstellt, auf der sich die aktuell angeforderte Ressource befindet repräsentieren

der aktuell angeforderten Ressource den domänenübergreifenden Zugriff auf Back-End-Ressourcen zu ermöglichen

Nachdem diese drei Teile eingerichtet wurden, konnte ich das Cookie erneut erhalten

2022-12-09 Update:

Ich habe noch mehr gefunden Prägnante und praktische Methode zum Hinzufügen eines domänenübergreifenden AnforderungsfiltersVerwenden Sie StringUtils des Druid-Datenpool-Abhängigkeitspakets isEmpty. Wenn ein Fehler gemeldet wird, schreiben Sie einfach selbst einen Ersatz

response.setHeader("Access-Control-Allow-Origin",request.getHeader("Origin"));

Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem des domänenübergreifenden Ajax- und Cookie-Fehlers beim Abrufen und Verlieren in SpringBoot. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen