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
@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); } }
@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); } }
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("*"); } }
Atas ialah kandungan terperinci Apakah cara springboot menyelesaikan isu merentas domain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!