Rumah >Java >javaTutorial >Apakah cara Spring Boot melaksanakan merentas domain
Disebabkan oleh sekatan dasar yang sama asal penyemak imbas. Dasar asal yang sama (Dasar asal yang sama) ialah konvensyen Ia adalah teras dan fungsi keselamatan paling asas penyemak imbas Jika dasar asal yang sama tiada, fungsi normal penyemak imbas mungkin terjejas. Web dibina berdasarkan dasar asal yang sama dan penyemak imbas hanyalah satu cara untuk melaksanakan dasar asal yang sama.
Dalam JavaScript, dasar asal yang sama akan mengehadkan interaksi antara domain berbeza dan menghalang serangan merentas domain. Asal yang dipanggil sama (iaitu, dalam domain yang sama) bermakna kedua-dua halaman mempunyai protokol, hos dan nombor port yang sama
Apabila ada salah satu protokol, nama domain dan port URL permintaan adalah berbeza daripada URL halaman semasa, ia adalah merentas domain
@Configuration public class GlobalCorsConfig { @Bean public CorsFilter corsFilter() { //1. 添加 CORS配置信息 CorsConfiguration config = new CorsConfiguration(); //放行哪些原始域 config.addAllowedOrigin("*"); //是否发送 Cookie config.setAllowCredentials(true); //放行哪些请求方式 config.addAllowedMethod("*"); //放行哪些原始请求头部信息 config.addAllowedHeader("*"); //暴露哪些头部信息 config.addExposedHeader("*"); //2. 添加映射路径 UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource(); corsConfigurationSource.registerCorsConfiguration("/**",config); //3. 返回新的CorsFilter return new CorsFilter(corsConfigurationSource); } }2. Tulis Semula WebMvcConfigurer (rentas domain global)
@Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") //是否发送Cookie .allowCredentials(true) //放行哪些原始域 .allowedOrigins("*") .allowedMethods(new String[]{"GET", "POST", "PUT", "DELETE"}) .allowedHeaders("*") .exposedHeaders("*"); } }
@RestController @CrossOrigin(origins = "*") public class HelloController { @RequestMapping("/hello") public String hello() { return "hello world"; } }Gunakan anotasi @CrossOrigin pada kaedah:
@RequestMapping("/hello") @CrossOrigin(origins = "*") //@CrossOrigin(value = "http://localhost:8081") //指定具体ip允许跨域 public String hello() { return "hello world"; }4 Tetapkan pengepala respons (domain silang separa) secara manualGunakan objek HttpServletResponse untuk menambah respons. header (Access-Control- Allow-Origin) untuk membenarkan domain asal Nilai Origin di sini juga boleh ditetapkan kepada "*", menunjukkan bahawa semua kebenaran dibenarkan.
@RequestMapping("/index") public String index(HttpServletResponse response) { response.addHeader("Access-Allow-Control-Origin","*"); return "index"; }5. Gunakan penapis tersuai untuk mencapai merentas domain Mula-mula tulis penapis, yang boleh dinamakan MyCorsFilter.java
package com.mesnac.aop; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component; @Component public class MyCorsFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type"); chain.doFilter(req, res); } public void init(FilterConfig filterConfig) {} public void destroy() {} }Konfigurasikan penapis ini dalam peranti web.xml untuk menjadikannya berkesan
<!-- 跨域访问 START--> <filter> <filter-name>CorsFilter</filter-name> <filter-class>com.mesnac.aop.MyCorsFilter</filter-class> </filter> <filter-mapping> <filter-name>CorsFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 跨域访问 END -->
Atas ialah kandungan terperinci Apakah cara Spring Boot melaksanakan merentas domain. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!