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

Apakah cara springboot menyelesaikan isu merentas domain?

WBOY
Lepaskan: 2023-05-22 15:49:25
ke hadapan
791 orang telah melayarinya

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());
}
Salin selepas log masuk

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);
    }
}
Salin selepas log masuk

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);
    }
}
Salin selepas log masuk

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("*");
    }
}
Salin selepas log masuk

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!

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