Rumah > Java > javaTutorial > Apakah penyelesaian merentas domain untuk projek SpringBoot?

Apakah penyelesaian merentas domain untuk projek SpringBoot?

WBOY
Lepaskan: 2023-05-19 12:43:06
ke hadapan
1943 orang telah melayarinya

Uji sama ada ia merentas domain

Anda boleh membuka konsol halaman dalam penyemak imbas, dan kemudian laksanakan kod berikut dalam konsol:

var xhr = new XMLHttpRequest()
xhr.open('GET', 'http://localhost:8080/user') // 替换请求的方法和地址
xhr.send()
xhr.onreadystatechange = function() {
    if (xhr.readyState == 4 && xhr.status == 200) {
        console.log(xhr.responseText)
    }
}
Salin selepas log masuk

Jika output berikut muncul , Wakil memang mempunyai domain silang

Apakah penyelesaian merentas domain untuk projek SpringBoot?

1. SpringBoot mengkonfigurasi CORS untuk menyelesaikan merentas domain

Iaitu, dalam semua konfigurasi pengepala respons kami untuk membenarkan silang -akses domain, CORS juga telah menjadi penyelesaian merentas domain arus perdana.

  • Buat fail konfigurasi baharu dalam projek

  • Tambah anotasi @Configuration untuk melaksanakan WebMvcConfigurerantara muka

  • Tulis semula kaedah addCorsMappings dan tetapkan kod yang membenarkan merentas domain

Kod khusus adalah seperti berikut:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**") // 所有接口
                .allowCredentials(true) // 是否发送 Cookie
                .allowedOriginPatterns("*") // 支持域
                .allowedMethods("GET", "POST", "PUT", "DELETE") // 支持方法
                .allowedHeaders("*")
                .exposedHeaders("*");
    }
}
Salin selepas log masuk

2. SpringBoot menyelesaikan rentas domain melalui CorsFilter

Kaedah ini serupa dengan kaedah di atas akses merentas domain juga dikonfigurasikan melalui Java Config Kod khusus adalah seperti berikut:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@Configuration
public class MyCorsFilter {
    @Bean
    public CorsFilter corsFilter() {
        // 1.创建 CORS 配置对象
        CorsConfiguration config = new CorsConfiguration();
        // 支持域
        config.addAllowedOriginPattern("*");
        // 是否发送 Cookie
        config.setAllowCredentials(true);
        // 支持请求方式
        config.addAllowedMethod("*");
        // 允许的原始请求头部信息
        config.addAllowedHeader("*");
        // 暴露的头部信息
        config.addExposedHeader("*");
        // 2.添加地址映射
        UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
        corsConfigurationSource.registerCorsConfiguration("/**", config);
        // 3.返回 CorsFilter 对象
        return new CorsFilter(corsConfigurationSource);
    }
}
Salin selepas log masuk

3. SpringBoot menyelesaikan rentas domain melalui anotasi

Boleh ditambahkan pada kelas pengawal atau kaedah pengawal kami bermakna semua kaedah di dalamnya boleh menjadi merentas domain kaedah boleh merentas domain Kod khusus adalah seperti berikut:

import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/user")
@CrossOrigin
public class UserController {
    @GetMapping
    public String getAll() {
        return "成功";
    }
}
Salin selepas log masuk

4. Konfigurasikan CORS melalui nginx untuk menyelesaikan masalah merentas domain

Jika projek kami berguna sebagai pelayan proksi terbalik, nginx juga boleh dikonfigurasikan dalam nginx untuk menyelesaikan masalah merentas domain Contoh konfigurasi adalah seperti berikut: CORS

1 Benarkan semua nama domain

server {
    ...
    location / {
        #允许 所有头部 所有域 所有方法
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Headers' '*';
        add_header 'Access-Control-Allow-Methods' '*';
        #OPTIONS 直接返回204
        if ($request_method = 'OPTIONS') {
            return 204;
        }
    }
    ...
}
Salin selepas log masuk
2

rreeee

Atas ialah kandungan terperinci Apakah penyelesaian merentas domain untuk projek SpringBoot?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan