A React és Spring Boot CORS-problémák kijavítása: blokkolt GET-kérés

Temp mail SuperHeros
A React és Spring Boot CORS-problémák kijavítása: blokkolt GET-kérés
A React és Spring Boot CORS-problémák kijavítása: blokkolt GET-kérés

A Spring Boot és React alkalmazások CORS-hibáinak megértése

Webes alkalmazások fejlesztése során a Reagál a frontend és Spring Boot a háttérben a fejlesztők gyakori problémája a hírhedt CORS hiba. Ez a hiba akkor fordul elő, ha a böngésző biztonsági okokból blokkol egy kérést, különösen akkor, ha egy másik porton vagy tartományon tárolt háttérszolgáltatáshoz próbál csatlakozni. Ebben az esetben Ön egy CORS-problémával foglalkozik, miközben a GET kérés a Reactból egy Spring Boot API-ra.

A hibaüzenet általában azt jelzi, hogy a böngésző blokkolja kérését, mert a Access-Control-Allow-Origin a fejléc hiányzik vagy rosszul van beállítva. Érdemes megjegyezni, hogy az eszközök, mint Postás ne kényszerítse ki ezeket a biztonsági korlátozásokat, ezért előfordulhat, hogy a kérése tökéletesen működik a Postmanban, de sikertelen a böngészőben.

Az Ön forgatókönyve szerint a hibaüzenet azt jelzi, hogy az elővizsgálati kérés nem megy át a hozzáférés-vezérlési ellenőrzésen. Ez általában akkor fordul elő, ha bizonyos fejlécek vagy metódusok nincsenek engedélyezve vagy megfelelően konfigurálva a kiszolgáló CORS-házirendjében. Bár úgy tűnik, hogy a CORS konfiguráció a helyén van a szerver oldalon, bizonyos problémák adódhatnak a böngészőkérések kezelésével kapcsolatban.

Ez a cikk segít megérteni a probléma kiváltó okát, és végigvezeti Önt a lehetséges megoldásokon CORS hiba a React és Spring Boot alkalmazásban.

Parancs Használati példa
@WebMvcConfigurer Spring Boot kommentár, amely az internetes beállítások, például a CORS, az elfogók és a formázók konfigurálására szolgál. Ezzel a problémával összefüggésben a CORS-leképezési szabályok meghatározására szolgál, amelyek lehetővé teszik a konkrét eredeteket és módszereket.
allowedOrigins() Ez a módszer a CORS-konfiguráció része, és meghatározza, hogy mely források férhetnek hozzá a kiszolgálóhoz. Ebben az esetben biztosítja, hogy a „http://localhost:8081” címen futó frontend kommunikálni tudjon a háttérrel.
withCredentials() Egy Axios konfiguráció, amely lehetővé teszi, hogy a több eredetű kérelmek hitelesítő adatokat, például cookie-kat és HTTP-hitelesítést tartalmazzanak. Ez döntő fontosságú olyan biztonságos kérések kezelésekor, amelyekhez felhasználóspecifikus adatokra van szükség.
MockMvcRequestBuilders.options() Egy módszer a Spring Boot MockMvc keretrendszerében, amely egy HTTP OPTIONS kérés szimulálására szolgál. Ezt általában a CORS-ben az előzetes vizsgálati kérések kezelésére használják, és a tényleges kérés elküldése előtt ellenőrzik a kiszolgáló engedélyeit.
HttpHeaders.ORIGIN Ez a fejléc a CORS-ben a kérés eredetének meghatározására szolgál. Több eredetû forgatókönyv esetén ezt elküldi a frontend a kiszolgálónak, hogy ellenõrizze, hogy az eredet engedélyezett-e.
MockMvcResultMatchers.header() Ezt a módszert az egységtesztben használják, hogy ellenőrizze, vannak-e konkrét HTTP-fejlécek a válaszban. Gondoskodik arról, hogy az 'Access-Control-Allow-Origin' fejléc helyesen kerül visszaadásra a vizsgálat előtti kérésekre.
Authorization: Bearer Az Axios kérésben ez a fejléc átad egy Bearer tokent hitelesítéshez. Biztosítja, hogy a háttérrendszer ellenőrizni tudja a kérést benyújtó ügyfél azonosságát.
useEffect() Egy React Hook, amely az összetevő renderelése után fut. Ebben az esetben ez az API-hívás indítására szolgál a háttérrendszer felé, és lekéri a projektadatokat az összetevő csatlakoztatásakor.
axios.get() Az Axios által biztosított módszer a HTTP GET kérések lebonyolításához. Ebben a forgatókönyvben ez arra szolgál, hogy kérést küldjön a Spring Boot API-nak, és lekérje a projektadatokat.

CORS-hibák kezelése React és Spring Boot alkalmazásokban

A fent megadott szkriptek célja a probléma megoldása CORS hibák React frontend és Spring Boot háttérbeállításban. A hiba akkor fordul elő, amikor a „http://localhost:8081” címen üzemeltetett frontend GET-kérelmet próbál küldeni a „http://localhost:8080” címen üzemeltetett Spring Boot API-hoz. A böngészők szigorú biztonsági szabályokat kényszerítenek ki, hogy megakadályozzák a jogosulatlan, több forrásból származó kérelmeket, ezért léteznek ezek a CORS-házirendek. A WebMvcConfigurer osztály a Spring Boot háttérkonfigurációjában segít meghatározni a CORS-szabályokat, amelyek lehetővé teszik az adott eredetet és metódusokat, végül megoldva a problémát.

A háttérben a `CorsConfig.java' fájl egy Spring Boot konfigurációs osztályt határoz meg. A @Bab és @Felülbírálás a megjegyzések a CORS konfiguráció beillesztésére és testreszabására szolgálnak. Az "addCorsMappings()" metódusban az "allowedOrigins()" függvény kifejezetten engedélyezi a "http://localhost:8081" címről érkező kéréseket, biztosítva, hogy a böngésző ezt az eredetet megbízható forrásként ismerje fel. Az "allowedMethods()" beépítése biztosítja, hogy minden HTTP metódus, beleértve a GET, POST és OPTIONS, engedélyezett legyen. Ez döntő fontosságú, mert a böngészők általában egy előzetes OPTIONS kérést küldenek annak ellenőrzésére, hogy a tényleges GET kérés engedélyezett-e.

A kezelőfelületen a React a kéréseket kezeli Axios, egy népszerű HTTP-kliens. A "ProjectPage.tsx" fájl "fetchData" függvényében az "axios.get()" függvény GET kérést küld a Spring Boot háttérrendszernek. A "withCredentials" beállítás igazra van állítva, lehetővé téve a cookie-k és hitelesítési adatok elküldését a kéréssel együtt. Ezenkívül az engedélyezési fejléc is szerepel a felhasználói token átadásához, biztosítva a kérés megfelelő hitelesítését. Ezen konfigurációk nélkül a böngésző biztonsági okokból blokkolná a kérést.

Végül a `CorsTest.java' egységtesztfájl ellenőrzi, hogy a CORS-konfiguráció a várt módon működik-e. Ez a teszt egy HTTP OPTIONS kérést szimulál a háttér API-hoz, amely a böngésző által küldött valódi előzetes ellenőrzési kérést utánozza. A teszt ellenőrzi, hogy a válasz tartalmazza-e a megfelelő fejléceket, mint pl Access-Control-Allow-Origin, amely lehetővé teszi a keresztirányú kéréseket a frontendről. A `MockMvcResultMatchers.header()` metódus biztosítja, hogy a szerver megfelelően válaszoljon az elővizsgálati kérésekre. Az egységtesztek bevonásával a fejlesztők biztosíthatják, hogy CORS-konfigurációjuk megbízható és működőképes legyen a különböző környezetekben.

A React + Spring Boot CORS-hibáinak megoldása konfigurációs módosításokkal

1. megközelítés: A Spring Boot CORS konfiguráció használata a háttérben

// CorsConfig.java
@Configuration
public class CorsConfig implements WebMvcConfigurer {
   @Override
   public void addCorsMappings(CorsRegistry registry) {
      registry.addMapping("/")
              .allowedOrigins("http://localhost:8081")
              .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
              .allowedHeaders("*")
              .allowCredentials(true);
   }
}

Az Axios használata a megfelelő CORS-kezeléshez Cookie-kkal a Reactban

2. megközelítés: reagáljon a Frontend Axios konfigurációjára a kereszteredetű kérésekre

// ProjectPage.tsx
const ProjectsPage = () => {
   const [projectsData, setProjectsData] = useState<ProjectsData[]>([]);
   const projectsUrl = 'http://localhost:8080/api/projects/admin/toinspection';
   useEffect(() => { fetchData(); }, []);
   const fetchData = async () => {
      const token = Cookies.get('token');
      try {
         const response = await axios.get<ProjectsData[]>(projectsUrl, {
            headers: { "Content-Type": "application/json", Authorization: `Bearer ${token}` },
            withCredentials: true
         });
         setProjectsData(response.data);
      } catch (error) {
         console.error("Error fetching projects:", error);
      }
   };
   return (
      <div>
         <AdminPageTemplate type="projects" children=<AdminModContent data={projectsData} />/>
      </div>
   );
};
export default ProjectsPage;

CORS-irányelvek tesztelése egységtesztekkel a tavaszi rendszerindításban

3. megközelítés: Egységtesztek írása a CORS-szabályzat érvényesítéséhez

// CorsTest.java
@RunWith(SpringRunner.class)
@WebMvcTest
public class CorsTest {
   @Autowired
   private MockMvc mockMvc;
   @Test
   public void testCorsHeaders() throws Exception {
      mockMvc.perform(MockMvcRequestBuilders.options("/api/projects/admin/toinspection")
              .header(HttpHeaders.ORIGIN, "http://localhost:8081")
              .header(HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD, "GET"))
              .andExpect(MockMvcResultMatchers.status().isOk())
              .andExpect(MockMvcResultMatchers.header().exists("Access-Control-Allow-Origin"))
              .andExpect(MockMvcResultMatchers.header().string("Access-Control-Allow-Origin", "http://localhost:8081"));
   }
}

A CORS felfedezése a biztonság és az API-tervezés kontextusában

Amikor foglalkozik CORS (cross-Origin Resource Sharing) a modern webalkalmazásokban döntő fontosságú, hogy megértsük a mögöttes biztonsági vonatkozásokat. A CORS-t a böngészők biztonsági intézkedésként valósítják meg, hogy megakadályozzák a rosszindulatú webhelyek jogosulatlan API-kéréseit a felhasználók nevében. Ez különösen fontos olyan esetekben, amikor bizalmas adatok cseréje történik a frontend és a háttérszolgáltatások, például a hitelesítési tokenek és a felhasználói hitelesítő adatok között. Amikor a CORS-t Spring Boot háttérrendszerben állítja be, elengedhetetlen, hogy csak megbízható források férhessenek hozzá a védett erőforrásokhoz, így a biztonsági konfiguráció a rendszer architektúrájának kulcsfontosságú eleme.

Egy másik kulcsfontosságú szempont a vizsgálat előtti kérések kezelése, amelyek a böngésző által a tényleges GET vagy POST kérés előtti automatikus kérések. Ez akkor fordul elő, ha az ügyfélnek meg kell erősítenie, hogy a kiszolgáló engedélyezi-e a több eredetű kérelmet, és támogatja-e az adott fejléceket vagy metódusokat. Egyes esetekben hibás konfigurációk ezek kezelése során repülés előtti kérések problémákat okozhat, ami CORS-hibákat eredményezhet, még akkor is, ha a tényleges kérés jól működik olyan eszközökben, mint a Postman. A Spring Boot `CorsRegistry-jének) a megfelelő fejlécekkel és metódusokkal történő konfigurálása biztosítja, hogy az elővizsgálati kérelmek megfelelően feldolgozásra kerüljenek, ami zökkenőmentes interakciót tesz lehetővé a frontend és a háttérrendszer között.

Ezenkívül a CORS kezelésének nem szabad statikusnak vagy mindenkire érvényesnek lennie. A mikroszolgáltatásokkal kezelt dinamikus környezetekben a különböző API-knak eltérő biztonsági követelményei lehetnek. Előfordulhat, hogy egyes API-knak csak bizonyos módszereket kell közzétenniük, míg mások szigorúbb ellenőrzést igényelhetnek az eredet felett. Itt válik fontossá a CORS-konfiguráció finomhangolása az egyes végpontokhoz. A megfelelő CORS-kezelés az API-teljesítmény optimalizálását is segíti azáltal, hogy csökkenti a szükségtelen előzetes vizsgálati kéréseket és biztosítja a zökkenőmentes felhasználói interakciót.

Gyakran ismételt kérdések a CORS-ről a React és a Spring Boot alkalmazásban

  1. Mi az a CORS, és miért van szükségem rá?
  2. A CORS egy biztonsági mechanizmus, amelyet a böngészők kényszerítenek ki, hogy engedélyezzék vagy blokkolják a több eredetű kérelmeket. Szüksége van rá annak biztosítására, hogy csak megbízható források férhessenek hozzá az API-jához.
  3. Hogyan engedélyezhetem a CORS-t a Spring Bootban?
  4. A Spring Boot alkalmazásban engedélyezheti a CORS-t a @WebMvcConfigurer felületet, és megadja a megengedett eredeteket, metódusokat és fejléceket allowedOrigins és allowedMethods.
  5. Miért működik a kérésem a Postmanban, de nem sikerül a böngészőben?
  6. A Postman megkerüli a böngésző biztonsági szabályzatait, például a CORS-t, de a böngészők szigorúan betartják azokat. Győződjön meg arról, hogy a szerver megfelelő CORS-fejléceket küld a böngészőnek.
  7. Mi az a repülés előtti kérelem?
  8. A repülés előtti kérelem automatikus OPTIONS a böngésző által küldött kérés annak ellenőrzésére, hogy a tényleges kérést engedélyezi-e a szerver, különösen a nem egyszerű HTTP kérések esetén.
  9. Hogyan tesztelhetem a CORS beállításaimat?
  10. A CORS-konfigurációt a segítségével tesztelheti MockMvcRequestBuilders.options() egységtesztekben az elővizsgálati kérések szimulálására és a szerver válaszainak ellenőrzésére.

Utolsó gondolatok a CORS-ről a Reactban és a Spring Bootban

Megoldás CORS hibák A React és Spring Boot alkalmazásokban a böngészők által betartatott biztonsági szabályzatok világos megértését jelenti. A Spring Boot háttérrendszerben az engedélyezett eredet és metódusok helyes konfigurálásával a legtöbb ilyen probléma megelőzhető.

Ezenkívül a tokenek biztonságos kezelése a kérésekben és a megfelelő fejlécek elküldésének biztosítása biztosítja a zökkenőmentes kommunikációt a frontend és a háttérrendszerek között. Ez az útmutató segít a fejlesztők előtt álló gyakori kihívások kezelésében, biztosítva a biztonságos és működőképes, több eredetű kérelmeket.

Források és hivatkozások a React és Spring Boot CORS megoldásaihoz
  1. Részletes információ a kezelésről CORS A Spring Boot alkalmazások hibái a hivatalos Spring dokumentációban találhatók. Spring Framework CORS dokumentáció
  2. A CORS kezelésének megértéséhez React alkalmazásokban az Axios használatával, tekintse meg ezt az útmutatót. Az Axios Konfiguráció kérése
  3. A Baeldung ezen cikke betekintést nyújt a CORS Spring Boot környezetben történő konfigurálásához. Baeldung - Spring Boot CORS útmutató
  4. A Mozilla Developer Network (MDN) átfogó magyarázatot ad a CORS-ről és annak fontosságáról a webbiztonságban. MDN Web Docs – CORS