Rumah >Java >javaTutorial >Mengapa Penapis CORS Spring Security Saya Tidak Menambah Pengepala \'Access-Control-Allow-Origin\'?

Mengapa Penapis CORS Spring Security Saya Tidak Menambah Pengepala \'Access-Control-Allow-Origin\'?

Linda Hamilton
Linda Hamiltonasal
2024-11-03 13:26:30393semak imbas

  Why is My Spring Security CORS Filter Not Adding the 'Access-Control-Allow-Origin' Header?

Spring Security CORS Filter: Troubleshooting 401 Error

Walaupun melaksanakan Spring Security dalam projek sedia ada anda, anda terus menghadapi 401 "No ' Access-Control-Allow-Origin' header" daripada pelayan anda. Ini timbul kerana tiada pengepala sedemikian dilampirkan pada respons.

Untuk menyelesaikan masalah ini, anda cuba menambah penapis tersuai pada rantai penapis sebelum penapis log keluar. Walau bagaimanapun, nampaknya penapis tidak digunakan pada permintaan anda. Mari kita periksa konfigurasi sedia ada anda dan kemungkinan isu:

Konfigurasi Keselamatan:

Konfigurasi keselamatan menggunakan konfigurasi CORS, yang dikonfigurasikan dengan betul. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa anotasi @CrossOrigin dalam pengawal anda mungkin bercanggah dengan konfigurasi ini, yang membawa kepada tingkah laku yang tidak dapat diramalkan.

Pelaksanaan Penapis:

Penapis anda nampaknya dikonfigurasikan dengan betul sebagai OncePerRequestFilter. Ia mentakrifkan kaedah yang diperlukan untuk pengendalian penapis, termasuk menambahkan pengepala CORS pada respons.

Pendaftaran Penapis:

Penapis anda sedang didaftarkan melalui Spring Boot, yang disahkan dengan catatan log. Penapis dipetakan kepada "/*" dan kedudukannya dalam rantai penapis adalah sesuai.

Rantai Penapis Dijana:

Output rantai penapis yang dijana menunjukkan bahawa CORS anda penapis tiada daripada senarai. Ini mungkin menjelaskan mengapa ia tidak berkuat kuasa.

Pengepala Respons:

Anda belum memberikan pengepala respons penuh yang diterima daripada pelayan. Memeriksa pengepala ini akan menawarkan cerapan tentang pengepala CORS sebenar yang terdapat dalam respons.

Edit 1:

Penyelesaian yang dicadangkan oleh @Piotr Sołtysiak telah dicuba, tetapi ia juga gagal menyelesaikan isu tersebut. Penapis CORS tiada dalam rantai penapis yang dijana dan ralat 401 berterusan.

Penyelesaian:

Dalam Spring Security 4.1 dan lebih baru, melaksanakan sokongan CORS telah berubah. Pendekatan pilihan ialah menggunakan konfigurasi berikut:

  • Buat kelas WebConfig yang memanjangkan WebMvcConfigurerAdapter dan melaksanakan kaedah addCorsMappings untuk menentukan asal usul, kaedah dan pengepala yang dibenarkan:
<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>
  • Dalam kelas SecurityConfig anda, dayakan CORS dan tentukan CorsConfigurationSource tersuai:
<code class="java">@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors();
    }

    @Bean
    public CorsConfigurationSource corsConfigurationSource() {
        // ... (Define the CORS configuration and return a UrlBasedCorsConfigurationSource)
    }
}</code>

Elakkan menggunakan pendekatan yang salah berikut:

  • http.authorizeRequests().antMatchers(HttpMethod.OPTIONS, "/**").permitAll();
  • web.ignoring().antMatchers(HttpMethod.OPTIONS);

Kaedah ini ditamatkan dan menyediakan pelaksanaan CORS yang tidak lengkap.

Atas ialah kandungan terperinci Mengapa Penapis CORS Spring Security Saya Tidak Menambah Pengepala 'Access-Control-Allow-Origin'?. 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