Rumah  >  Artikel  >  Java  >  Mengapa Saya Mendapat Ralat \"Tiada \'Access-Control-Allow-Origin\' Ada" Ralat Selepas Menambah Keselamatan Spring?

Mengapa Saya Mendapat Ralat \"Tiada \'Access-Control-Allow-Origin\' Ada" Ralat Selepas Menambah Keselamatan Spring?

DDD
DDDasal
2024-10-31 01:43:29339semak imbas

Why Am I Getting a

Penapis CORS Keselamatan Musim Bunga: Menyelesaikan masalah "Tiada Pengepala 'Kawalan-Kawalan-Benarkan-Asal'"

Penjelasan

Menambah Spring Security pada projek sedia ada boleh mencetuskan ralat "Tiada pengepala 'Access-Control-Allow-Origin'" semasa permintaan Cross-Origin Resource Sharing (CORS). Ralat ini berlaku kerana pengepala respons Access-Control-Allow-Origin tidak ditambahkan pada permintaan.

Penyelesaian

Kaedah 1:

Kemas kini kod anda untuk menggunakan sokongan CORS terbina dalam Spring Security. Tambahkan konfigurasi berikut pada aplikasi anda:

<code class="java">@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedMethods("HEAD", "GET", "PUT", "POST", "DELETE", "PATCH");
    }
}</code>

Kaedah 2:

Jika anda mahukan lebih kawalan ke atas konfigurasi CORS, gunakan pendekatan berikut:

<code class="java">@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors();
    }

    @Bean
    public CorsConfigurationSource corsConfigurationSource() {
        final CorsConfiguration configuration = new CorsConfiguration();
        configuration.setAllowedOrigins(ImmutableList.of("*"));
        configuration.setAllowedMethods(ImmutableList.of("HEAD",
                "GET", "POST", "PUT", "DELETE", "PATCH"));
        configuration.setAllowCredentials(true);
        configuration.setAllowedHeaders(ImmutableList.of("Authorization", "Cache-Control", "Content-Type"));
        final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", configuration);
        return source;
    }
}</code>

Nota Tambahan:

  • Elakkan menggunakan http.authorizeRequests().antMatchers(HttpMethod.OPTIONS, "/**").permitAll(); atau web.ignoring().antMatchers(HttpMethod.OPTIONS);, kerana ia adalah penyelesaian yang salah.
  • Pastikan penapis CORS anda diletakkan selepas SecurityContextPersistenceFilter dan sebelum LogoutFilter dalam rantaian penapis.
  • Sahkan bahawa pengepala Access-Control-Allow-Methods termasuk kata kerja HTTP yang diperlukan: GET, PUT, POST, dll.
  • Jika anda masih menghadapi ralat CORS, semak log aplikasi anda untuk sebarang maklumat tambahan yang boleh membantu tentukan isu itu.

Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat \"Tiada \'Access-Control-Allow-Origin\' Ada" Ralat Selepas Menambah Keselamatan Spring?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn