1. 程式人生 > >springboot跨域處理

springboot跨域處理

一、什麼是跨域(CORS)

  跨域(CORS)是指不同域名之間的互相訪問,本地伺服器去訪問另一個伺服器的資源,這個時候就會出現跨域訪問的問題,是由瀏覽器對於JavaScript所定義的安全限制策

  同域: 
    - 同一協議, 如http或https 
    - 同一IP地址, 如192.168.1.2 
    - 同一埠, 如8080 
    以上三個條件中有一個條件不同就會產生 跨域問題

二、跨域解決方案

  1.前端解決方案

    1.1 使用 JSONP 來支援跨域的請求

    1.2 使用NodeJS伺服器做為服務代理

  2.後端解決方案

   這裡有三種配置方式

   2.1 配置過濾器

@Configuration
public class GlobalCorsConfig {
@Bean
public CorsFilter corsFilter() {
  CorsConfiguration config = new CorsConfiguration();
  config.addAllowedOrigin("*");
  config.setAllowCredentials(true);
  config.addAllowedMethod("*");
  config.addAllowedHeader("*");
  config.addExposedHeader("*");

  UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
  configSource.registerCorsConfiguration("/**", config);

  return new CorsFilter(configSource);
  }
}
2.2 配置攔截器

@Configuration
public class MyConfiguration extends WebMvcConfigurerAdapter {

@Override
public void addCorsMappings(CorsRegistry registry) {
  registry.addMapping("/**")

  .allowedMethods(httpMethod.GET.name(),httpMethod.POST.name(),httpMethod.PUT.name(),httpMethod.PATCH.name(),httpMethod.DELETE.name())//允許訪問的型別
  .allowCredentials(true)
  .allowedHeaders("*")
  .allowedOrigins("*")
  .maxAge(3600);

  }
}
2.3單個請求跨域請求

@RequestMapping("/hello")

@CrossOrigin("http://localhost:8080")

public String hello( ){

   return "Hello World";

}

另:本人剛開始寫部落格,小白,想用部落格記錄問題點,歡迎大佬們評論不足的地方,多