Rumah Java javaTutorial Bagaimana Springboot menyelesaikan masalah permintaan merentas domain pengepala tersuai ajax

Bagaimana Springboot menyelesaikan masalah permintaan merentas domain pengepala tersuai ajax

May 16, 2023 pm 12:43 PM
ajax springboot headers

1. Apakah itu merentas domain

Disebabkan dasar asal yang sama (dasar asal yang sama), ia adalah dasar keselamatan terkenal yang dicadangkan oleh Netscape Now semua penyemak imbas yang menyokong JavaScript Semua pelayan akan menggunakan strategi ini Apa yang dipanggil asal yang sama bermakna nama domain, protokol dan port adalah sama.) Jika mana-mana protokol, nama domain dan port yang digunakan untuk menghantar URL permintaan. adalah berbeza daripada alamat halaman semasa, ia dianggap merentas domain.

Untuk butiran, sila semak jadual berikut:

Bagaimana Springboot menyelesaikan masalah permintaan merentas domain pengepala tersuai ajax

2 Cara springboot menyelesaikan masalah merentas domain

1. Penyelesaian permintaan merentas domain biasa:

①Tambah anotasi @CrossOrigin(origins = "http://127.0.0.1:8020", maxAge = 3600) pada antara muka permintaan

Penerangan: origins = "http://127.0.0.1:8020" Nilai asal ialah domain yang sedang meminta antara muka

②Konfigurasi umum (semua antara muka membenarkan permintaan merentas domain)

Kelas konfigurasi Baharu atau tambahkan kaedah CorsFilter dan CorsConfiguration dalam Aplikasi

@Configuration 
public class CorsConfig { 
  private CorsConfiguration buildConfig() { 
    CorsConfiguration corsConfiguration = new CorsConfiguration(); 
    corsConfiguration.addAllowedOrigin("*"); // 1允许任何域名使用
    corsConfiguration.addAllowedHeader("*"); // 2允许任何头
    corsConfiguration.addAllowedMethod("*"); // 3允许任何方法(post、get等) 
    return corsConfiguration; 
  } 

  @Bean 
  public CorsFilter corsFilter() { 
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); 
    source.registerCorsConfiguration("/**", buildConfig()); // 4 
    return new CorsFilter(source); 
  } 
}
Salin selepas log masuk

2 Permintaan silang domain bagi pengepala tersuai ajax

$.ajax({
    type:"GET",
    url:"http://localhost:8766/main/currency/sginInState",
    dataType:"JSON",
    data:{
      uid:userId
    },
    beforeSend: function (XMLHttpRequest) {
      XMLHttpRequest.setRequestHeader("Authorization", access_token);
    },
    success:function(res){
      console.log(res.code)
    }
  })
Salin selepas log masuk

Permintaan. http pada masa ini: Antara muka //localhost:8766/main/currency/sginInState menemui OPTIONS http://localhost:8766/main/currency/sginInState 500 penyelesaian rentas domain biasa tidak dapat menyelesaikan masalah ini Permintaan OPTIONS muncul?

Bagaimana Springboot menyelesaikan masalah permintaan merentas domain pengepala tersuai ajax

Sebab

Pelayar akan menghantar permintaan prapenerbangan dengan PILIHAN kaedah sebelum menghantar permintaan prapenerbangan Ini Permintaan itu digunakan untuk mengesahkan sama ada permintaan ini selamat, tetapi tidak semua permintaan akan dihantar dan perlu memenuhi syarat berikut:

•Kaedah permintaan bukan GET/HEAD/POST
•Jenis-Kandungan Permintaan POST Bukan application/x-www-form-urlencoded, multipart/form-data, atau text/plain

•Permintaan menetapkan medan pengepala tersuai

Untuk antara muka pihak pengurusan, Saya mempunyai Antara muka melakukan pengesahan kebenaran Setiap permintaan perlu membawa medan tersuai (token) dalam pengepala, jadi penyemak imbas akan menghantar permintaan OPTIONS tambahan untuk mengesahkan keselamatan permintaan ini.

Mengapa OPTIONS meminta 500?

Permintaan OPTIONS hanya akan membawa medan tersuai dan tidak akan membawa nilai yang sepadan apabila medan token disahkan di latar belakang, token adalah NULL, jadi pengesahan gagal dan tidak normal. .

Jadi mari selesaikan masalah ini sekarang:

① Tambahkan

spring:
pada aplikasi projek but spring.yml mvc :
permintaan-pilihan-penghantaran: benar

Nota: Penyelesaian ini mungkin tidak menyelesaikan masalah OPTIONS dalam sesetengah kes Sebabnya mungkin isu alam sekitar atau isu konfigurasi penapis tersuai yang rumit, dsb.

②Tambah konfigurasi penapis

Langkah 1: Kelas konfigurasi penapis permintaan Penapis Permintaan Tulisan ini perlu melaksanakan kelas HandlerInterceptor, yang berada di bawah org.springframework.web.servlet.HandlerInterceptor.

Pelaksanaan kod khusus:

@Component
public class RequestFilter implements HandlerInterceptor {
  public boolean preHandler(HttpServletRequest request,HttpServletResponse response,Object handler){
    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setHeader("Access-Control-Allow-Credentials", "true");
    response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS");
    response.setHeader("Access-Control-Max-Age", "86400");
    response.setHeader("Access-Control-Allow-Headers", "Authorization");
    // 如果是OPTIONS请求则结束
    if (HttpMethod.OPTIONS.toString().equals(request.getMethod())) {
      response.setStatus(HttpStatus.NO_CONTENT.value());
      return false;
    }
    return true;
  }
}
Salin selepas log masuk

Langkah 2: Tulisan Tangan MyWebConfiguration Kelas ini perlu mewarisi WebMvcConfigurationSupport.

Nota: WebMvcConfigurationSupport ialah versi 2.x atau lebih tinggi, dan versi 1.x ialah WebMvcConfigurerAdapter.

Pelaksanaan kod khusus:

@Component
public class MyWebConfiguration extends WebMvcConfigurationSupport{
  @Resource
  private RequestFilter requestFilter;
  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    // 跨域拦截器
    registry.addInterceptor(requestFilter).addPathPatterns("/**");
  }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana Springboot menyelesaikan masalah permintaan merentas domain pengepala tersuai ajax. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menyelesaikan ralat 403 yang dihadapi oleh permintaan jQuery AJAX Bagaimana untuk menyelesaikan ralat 403 yang dihadapi oleh permintaan jQuery AJAX Feb 20, 2024 am 10:07 AM

Tajuk: Kaedah dan contoh kod untuk menyelesaikan ralat 403 dalam permintaan AJAX jQuery Ralat 403 merujuk kepada permintaan bahawa pelayan melarang akses kepada sumber Ralat ini biasanya berlaku kerana permintaan itu tidak mempunyai kebenaran atau ditolak oleh pelayan. Apabila membuat permintaan jQueryAJAX, anda kadangkala menghadapi situasi ini Artikel ini akan memperkenalkan cara menyelesaikan masalah ini dan memberikan contoh kod. Penyelesaian: Semak kebenaran: Mula-mula pastikan alamat URL yang diminta adalah betul dan sahkan bahawa anda mempunyai kebenaran yang mencukupi untuk mengakses sumber tersebut.

Analisis perbandingan dan perbezaan antara SpringBoot dan SpringMVC Analisis perbandingan dan perbezaan antara SpringBoot dan SpringMVC Dec 29, 2023 am 11:02 AM

SpringBoot dan SpringMVC adalah kedua-dua rangka kerja yang biasa digunakan dalam pembangunan Java, tetapi terdapat beberapa perbezaan yang jelas antara mereka. Artikel ini akan meneroka ciri dan penggunaan kedua-dua rangka kerja ini dan membandingkan perbezaannya. Mula-mula, mari belajar tentang SpringBoot. SpringBoot telah dibangunkan oleh pasukan Pivotal untuk memudahkan penciptaan dan penggunaan aplikasi berdasarkan rangka kerja Spring. Ia menyediakan cara yang pantas dan ringan untuk membina bersendirian, boleh dilaksanakan

Bagaimana untuk menyelesaikan ralat permintaan jQuery AJAX 403 Bagaimana untuk menyelesaikan ralat permintaan jQuery AJAX 403 Feb 19, 2024 pm 05:55 PM

jQuery ialah perpustakaan JavaScript popular yang digunakan untuk memudahkan pembangunan sisi klien. AJAX ialah teknologi yang menghantar permintaan tak segerak dan berinteraksi dengan pelayan tanpa memuatkan semula keseluruhan halaman web. Walau bagaimanapun, apabila menggunakan jQuery untuk membuat permintaan AJAX, anda kadangkala menghadapi 403 ralat. Ralat 403 biasanya ralat akses yang dinafikan pelayan, mungkin disebabkan oleh dasar keselamatan atau isu kebenaran. Dalam artikel ini, kami akan membincangkan cara menyelesaikan permintaan jQueryAJAX yang menghadapi ralat 403

PHP dan Ajax: Membina enjin cadangan autolengkap PHP dan Ajax: Membina enjin cadangan autolengkap Jun 02, 2024 pm 08:39 PM

Bina enjin cadangan autolengkap menggunakan PHP dan Ajax: Skrip sisi pelayan: mengendalikan permintaan Ajax dan mengembalikan cadangan (autocomplete.php). Skrip pelanggan: Hantar permintaan Ajax dan cadangan paparan (autocomplete.js). Kes praktikal: Sertakan skrip dalam halaman HTML dan nyatakan pengecam elemen input carian.

Bagaimana untuk menyelesaikan masalah jQuery AJAX ralat 403? Bagaimana untuk menyelesaikan masalah jQuery AJAX ralat 403? Feb 23, 2024 pm 04:27 PM

Bagaimana untuk menyelesaikan masalah jQueryAJAX ralat 403? Apabila membangunkan aplikasi web, jQuery sering digunakan untuk menghantar permintaan tak segerak. Walau bagaimanapun, kadangkala anda mungkin menghadapi kod ralat 403 apabila menggunakan jQueryAJAX, menunjukkan bahawa akses dilarang oleh pelayan. Ini biasanya disebabkan oleh tetapan keselamatan bahagian pelayan, tetapi terdapat cara untuk mengatasinya. Artikel ini akan memperkenalkan cara menyelesaikan masalah ralat jQueryAJAX 403 dan memberikan contoh kod khusus. 1. membuat

Bagaimana untuk mendapatkan pembolehubah daripada kaedah PHP menggunakan Ajax? Bagaimana untuk mendapatkan pembolehubah daripada kaedah PHP menggunakan Ajax? Mar 09, 2024 pm 05:36 PM

Menggunakan Ajax untuk mendapatkan pembolehubah daripada kaedah PHP adalah senario biasa dalam pembangunan web Melalui Ajax, halaman boleh diperoleh secara dinamik tanpa menyegarkan data. Dalam artikel ini, kami akan memperkenalkan cara menggunakan Ajax untuk mendapatkan pembolehubah daripada kaedah PHP, dan memberikan contoh kod khusus. Pertama, kita perlu menulis fail PHP untuk mengendalikan permintaan Ajax dan mengembalikan pembolehubah yang diperlukan. Berikut ialah kod contoh untuk fail PHP mudah getData.php:

Apakah perbezaan antara SpringBoot dan SpringMVC? Apakah perbezaan antara SpringBoot dan SpringMVC? Dec 29, 2023 am 10:46 AM

Apakah perbezaan antara SpringBoot dan SpringMVC? SpringBoot dan SpringMVC ialah dua rangka kerja pembangunan Java yang sangat popular untuk membina aplikasi web. Walaupun mereka sering digunakan secara berasingan, perbezaan antara mereka adalah jelas. Pertama sekali, SpringBoot boleh dianggap sebagai lanjutan atau versi dipertingkatkan bagi rangka kerja Spring. Ia direka bentuk untuk memudahkan proses permulaan dan konfigurasi aplikasi Spring untuk membantu pembangun

PHP lwn. Ajax: Penyelesaian untuk mencipta kandungan yang dimuatkan secara dinamik PHP lwn. Ajax: Penyelesaian untuk mencipta kandungan yang dimuatkan secara dinamik Jun 06, 2024 pm 01:12 PM

Ajax (JavaScript Asynchronous dan XML) membenarkan menambah kandungan dinamik tanpa memuatkan semula halaman. Menggunakan PHP dan Ajax, anda boleh memuatkan senarai produk secara dinamik: HTML mencipta halaman dengan elemen kontena dan permintaan Ajax menambah data pada elemen selepas memuatkannya. JavaScript menggunakan Ajax untuk menghantar permintaan kepada pelayan melalui XMLHttpRequest untuk mendapatkan data produk dalam format JSON daripada pelayan. PHP menggunakan MySQL untuk menanyakan data produk daripada pangkalan data dan mengekodnya ke dalam format JSON. JavaScript menghuraikan data JSON dan memaparkannya dalam bekas halaman. Mengklik butang mencetuskan permintaan Ajax untuk memuatkan senarai produk.

See all articles