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:
<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>
<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:
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!