Rumah  >  Artikel  >  Java  >  Apakah cara springboot menyelesaikan isu merentas domain?

Apakah cara springboot menyelesaikan isu merentas domain?

WBOY
WBOYke hadapan
2023-05-22 15:49:25763semak imbas

Apakah itu merentas domain

Merentas domain: Ini bermakna penyemak imbas tidak boleh melaksanakan skrip daripada tapak web lain. Ia disebabkan oleh dasar asal yang sama penyemak imbas, iaitu sekatan keselamatan yang dikenakan oleh penyemak imbas pada JavaScript.
Contohnya: Halaman a ingin mendapatkan sumber halaman b Jika protokol, nama domain, port dan nama subdomain halaman a dan b adalah berbeza, tindakan akses yang dilakukan semuanya merentas domain dan penyemak imbas.
Atas sebab keselamatan, akses merentas domain biasanya dihadkan, iaitu permintaan sumber merentas domain tidak dibenarkan. Nota: Sekatan akses merentas domain sebenarnya adalah sekatan penyemak imbas. Adalah penting untuk memahami

Dasar asal yang sama: bermakna protokol, nama domain dan port mestilah sama Sebarang perbezaan di antara mereka akan menyebabkan masalah merentas domain menyelesaikan masalah merentas domain Beberapa cara

Kaedah 1. Anotasi SpringBoot @CrossOrigin

Tambahkan anotasi @CrossOrigin terus pada kaedah atau kelas Pengawal SpringMVC menggunakan @CrossOrigin senario penggunaan jdk1 + Spring4.2+

@GetMapping("/hello")
@CrossOrigin
public String hello() {
        return "hello:" + simpleDateFormat.format(new Date());
}

Kaedah 2: Gunakan CorsFilter

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 ConfigConfiguration {
    @Bean
    public CorsFilter CorsFilter() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOriginPattern("*");
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.setAllowCredentials(true);
        UrlBasedCorsConfigurationSource ub = new UrlBasedCorsConfigurationSource();
        ub.registerCorsConfiguration("/**", corsConfiguration);
        return new CorsFilter(ub);
    }
}

Kaedah 3: Kaedah penapis tersuai (penapis web)

@Component
public class CustomFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse res = (HttpServletResponse) servletResponse;
        // 设置允许Cookie
        res.addHeader("Access-Control-Allow-Credentials", "true");
        // 允许http://www.xxx.com域(自行设置,这里只做示例)发起跨域请求
        res.addHeader("Access-Control-Allow-Origin", "*");
        // 设置允许跨域请求的方法
        res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
        // 允许跨域请求包含content-type
        res.addHeader("Access-Control-Allow-Headers", "Content-Type,X-CAF-Authorization-Token,sessionToken,X-TOKEN");
        if (((HttpServletRequest) servletRequest).getMethod().equals("OPTIONS")) {
            servletResponse.getWriter().println("ok");
            return;
        }
        filterChain.doFilter(servletRequest, servletResponse);
    }
}

Kaedah 4: Laksanakan kaedah addCorsMappings dalam WebMvcConfigurer

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Component
public class MyWebMvcConfigurer implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")  // 匹配所有的路径
                .allowCredentials(true) // 设置允许凭证
                .allowedHeaders("*")   // 设置请求头
                .allowedMethods("GET", "POST", "PUT", "DELETE") // 设置允许的方式
                .allowedOriginPatterns("*");
    }
}

Kaedah 5: Gunakan nginx sebagai proksi dinamik

Atas ialah kandungan terperinci Apakah cara springboot menyelesaikan isu merentas domain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam