Spring Boot: So lösen Sie Cross-Origin-Probleme
Beschreibung des Cross-Origin-Problems
Möglicherweise wird die folgende Fehlermeldung angezeigt:
wurde durch die CORS-Richtlinie blockiert: Auf der angeforderten Ressource ist kein „Access-Control-Allow-Origin“-Header vorhanden
Dieser Fehler weist darauf hin, dass eine Anfrage an eine bestimmte Adresse vom CORS-Protokoll blockiert wurde, weil der Access-Control-Allow-Origin-Header in der Ressource fehlt.
Analyse ursprungsübergreifender Probleme
Die Hauptursache für Cross-Origin-Probleme liegt darin, dass Browser aus Sicherheitsgründen den Zugriff auf Ressourcen außerhalb der aktuellen Site einschränken.
Stellen Sie sich zum Beispiel eine Website vor, die unter http://127.0.0.1:8080/ mit einer bestimmten Seite gehostet wird. Wenn Sie von derselben Site aus auf Ressourcen zugreifen, gibt es keine Einschränkungen. Wenn Sie jedoch versuchen, von einer anderen Site aus auf Ressourcen zuzugreifen (z. B. http://127.0.0.1:8081), blockiert der Browser die Anfrage.
Hinweis: Wir betrachten Protokoll, Domäne und Port als Teil der Definition eines „gleichen Ursprungs“.
Elemente mit einem src-Attribut, wie img- und script-Tags, unterliegen dieser Einschränkung nicht.
In der Vergangenheit, als Front-End und Back-End nicht getrennt waren, existierten Seiten und Anforderungsschnittstellen unter derselben Domäne und demselben Port. Browser würden dann Anfragen von einer Seite, die in einer Domain gehostet wird, erlauben, Ressourcen von derselben Domain anzufordern.
Zum Beispiel kann http://127.0.0.1:8080/index.html http://127.0.0.1:8080/a/b/c/userLit frei anfordern.
Heutzutage, da Front-End und Back-End in verschiedene Anwendungen getrennt sind, ist dies nicht zulässig und führt zu CORS-Problemen.
Was ist Ursprung und Cross-Origin?
Ursprung (oder Quelle) besteht aus dem Protokoll, der Domäne und der Portnummer.
Eine URL besteht aus Protokoll, Domäne, Port und Pfad. Zwei URLs gelten als „gleicher Ursprung“, wenn ihr Protokoll, ihre Domäne und ihr Port alle identisch sind. Jeder Unterschied in einem dieser drei Elemente stellt eine herkunftsübergreifende Anfrage dar.
Erwägen Sie herkunftsübergreifende Vergleiche für https://www.baidu.com/index.html:
URL | Cross-Origin | Reason |
---|---|---|
https://www.baidu.com/more/index.html | No | Same protocol, domain, and port |
https://map.baidu.com/ | Yes | Different domain |
http://www.baidu.com/index.html | Yes | Different protocol |
https://www.baidu.com:81/index.html | Yes | Different port |
Apakah Dasar Asal Sama?
Dasar Asal Sama ialah ciri keselamatan pelayar asas. Tanpanya, kefungsian biasa penyemak imbas mungkin berisiko. Seni bina web sangat bergantung pada dasar ini dan penyemak imbas melaksanakannya untuk memastikan keselamatan.
Dasar Asal Sama termasuk:
- Dasar Asal Sama DOM: Menghalang manipulasi DOM bagi halaman asal yang berbeza. Terpakai terutamanya pada senario iframe silang asal yang mana iframe domain berbeza tidak boleh mengakses satu sama lain.
- Dasar XMLHttpRequest Same-Origin: Melarang permintaan HTTP ke asal yang berbeza menggunakan objek XHR.
Menyelesaikan Isu Silang Asal dalam But Spring
1. Mencipta Penapis untuk Mengendalikan CORS
Dalam projek di mana bahagian hadapan dan bahagian belakang digunakan secara berasingan, menangani CORS adalah penting. Kuki digunakan untuk menyimpan maklumat log masuk pengguna, dan pemintas Spring mengurus kebenaran. Isu timbul apabila pemintas dan CORS diproses dalam susunan yang salah, menyebabkan ralat CORS.
Permintaan HTTP terlebih dahulu melalui penapis sebelum mencapai servlet dan kemudian pemintas. Untuk memastikan pemprosesan CORS berlaku sebelum pemintasan kebenaran, kami boleh meletakkan konfigurasi CORS dalam penapis.
@Configuration public class CorsConfig { @Bean public CorsFilter corsFilter() { CorsConfiguration corsConfiguration = new CorsConfiguration(); corsConfiguration.addAllowedOrigin("*"); corsConfiguration.addAllowedHeader("*"); corsConfiguration.addAllowedMethod("*"); corsConfiguration.setAllowCredentials(true); UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource(); urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration); return new CorsFilter(urlBasedCorsConfigurationSource); } }
2. Mengkonfigurasi CORS dalam WebMvcConfigurer
Walaupun JSONP boleh menangani isu silang asal pada bahagian hadapan, ia hanya menyokong permintaan GET, yang mengehadkan dalam aplikasi RESTful. Sebaliknya, anda boleh mengendalikan permintaan silang asal dengan Perkongsian Sumber Silang (CORS) di bahagian belakang. Penyelesaian ini bukan unik untuk Spring Boot dan telah digunakan dalam rangka kerja SSM tradisional. Anda mengkonfigurasinya dengan melaksanakan antara muka WebMvcConfigurer dan mengatasi kaedah addCorsMappings.
@Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowCredentials(true) .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") .maxAge(3600); } }
3. Mengkonfigurasi CORS dalam Pengawal
Anda boleh mendayakan CORS untuk kaedah pengawal tertentu dengan menambahkan anotasi @CrossOrigin pada anotasi @RequestMapping. Secara lalai, @CrossOrigin membenarkan semua asal dan kaedah HTTP yang dinyatakan dalam @RequestMapping.
@RestController @RequestMapping("/account") public class AccountController { @CrossOrigin @GetMapping("/{id}") public Account retrieve(@PathVariable Long id) { // ... } @DeleteMapping("/{id}") public void remove(@PathVariable Long id) { // ... } }
Memahami Parameter @CrossOrigin:
- @CrossOrigin tanpa parameter membenarkan semua URL mengakses.
- @CrossOrigin(origins = "http://127.0.0.1:8080") mengehadkan akses kepada URL yang ditentukan.
- Anotasi ini boleh digunakan pada kelas atau kaedah.
- Atribut nilai atau asal usul menentukan URL yang dibenarkan.
- maxAge menunjukkan umur maksimum dalam saat untuk cache permintaan prapenerbangan.
- allowCredentials menunjukkan sama ada bukti kelayakan (kuki) dibenarkan. Lalai adalah palsu.
- allowedHeaders menentukan pengepala permintaan yang dibenarkan.
- kaedah menentukan kaedah permintaan yang dibenarkan, lalai ialah GET, POST, HEAD.
Sebab @CrossOrigin Mungkin Tidak Berfungsi
- Versi MVC musim bunga mestilah 4.2 atau lebih tinggi untuk menyokong @CrossOrigin.
- Permintaan yang salah mungkin muncul sebagai isu silang asal disebabkan oleh respons pelayan yang tidak betul.
- Jika menambahkan @CrossOrigin di atas anotasi Pengawal masih mengakibatkan isu, satu penyelesaian yang mungkin adalah dengan menentukan kaedah HTTP dalam @RequestMapping.
Contoh:
@CrossOrigin @RestController public class PersonController { @RequestMapping(method = RequestMethod.GET) public String add() { // some code } }
Das obige ist der detaillierte Inhalt vonSpring Boot: So lösen Sie Cross-Origin-Probleme. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Dieser Artikel analysiert 2025 die vier besten JavaScript -Frameworks (React, Angular, Vue, Svelte) und verglichen ihre Leistung, Skalierbarkeit und Zukunftsaussichten. Während alle aufgrund starker Gemeinschaften und Ökosysteme dominant bleiben, sind ihr relatives Popul

Dieser Artikel befasst sich mit der Verwundbarkeit von CVE-2022-1471 in Snakeyaml, einem kritischen Fehler, der die Ausführung von Remote-Code ermöglicht. Es wird beschrieben

Mit der Klassenbelastung von Java wird das Laden, Verknüpfen und Initialisieren von Klassen mithilfe eines hierarchischen Systems mit Bootstrap-, Erweiterungs- und Anwendungsklassenloadern umfasst. Das übergeordnete Delegationsmodell stellt sicher

In dem Artikel wird in der Implementierung von mehrstufigem Caching in Java mithilfe von Koffein- und Guava-Cache zur Verbesserung der Anwendungsleistung erläutert. Es deckt die Einrichtungs-, Integrations- und Leistungsvorteile sowie die Bestrafung des Konfigurations- und Räumungsrichtlinienmanagements ab

Node.js 20 verbessert die Leistung durch V8 -Motorverbesserungen erheblich, insbesondere durch schnellere Müllsammlung und E/A. Zu den neuen Funktionen gehören eine bessere Support von WebAssembly und raffinierte Debugging -Tools, die Produktivität der Entwickler und die Anwendungsgeschwindigkeit.

Iceberg, ein offenes Tabellenformat für große analytische Datensätze, verbessert die Leistung und Skalierbarkeit von Data Lake. Es befasst sich mit Einschränkungen von Parquet/ORC durch internes Metadatenmanagement und ermöglicht eine effiziente Schemaentwicklung, Zeitreisen, gleichzeitiger W

In diesem Artikel wird die Integration der funktionalen Programmierung in Java unter Verwendung von Lambda -Ausdrücken, Streams -API, Methodenreferenzen und optional untersucht. Es zeigt Vorteile wie eine verbesserte Lesbarkeit der Code und die Wartbarkeit durch SUKTIVE UND VERUSNAHMETALITÄT

In diesem Artikel werden Methoden zum Austausch von Daten zwischen Gurkenschritten und dem Vergleich des Szenario -Kontextes, globalen Variablen, Argumentenübergabe und Datenstrukturen untersucht. Es betont Best Practices für Wartbarkeit, einschließlich präziser Kontextgebrauch, beschreibend
