springboot中通過cors協議解決跨域問題

1.通過filter進行定義cors配置,設置優先級大於其他權限處理filter


@Configuration
public class CorsFilterBean {

    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }


    @Bean
    public FilterRegistrationBean registCorsFilter() {
        FilterRegistrationBean registration = new FilterRegistrationBean(corsFilter());
        //優先處理
        registration.setOrder(0);
        return registration;
    }

}

2.全局配置

@SpringBootApplication
public class Application extends WebMvcConfigurerAdapter  {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/**").allowedOrigins("*")
                .allowedHeaders("*").allowedMethods("*");
    }

}

3.使用註解@CrossOrigin進行配置

@CrossOrigin

ajax跨域時如果包含自定義請求頭時會首先發送OPTIONS的預檢請求,當請求滿足時纔會再次發送實際請求

如果配置了cors參數時,存在自定義請求頭的權限驗證,若未採用第一種方式,ajax將無法直接訪問到後續的cors處理,此時需要進行放行ajax的預檢方法,最後交給spring處理

  String method = request.getMethod();
  if (method.equals("OPTIONS")) {
      filterChain.doFilter(servletRequest, servletResponse);
  }

注: 經測試spring同時支持該三種方式的控制,filter的優先級大於另外兩種配置方式,只要滿足其中一種即可
HTTP訪問控制(cors)介紹


也可以直接通過設置請求頭參數

response.setHeader(“Access-Control-Allow-Origin”, “*”);
response.setHeader(“Access-Control-Allow-Headers”, “*”);
//允許的訪問方法
response.setHeader(“Access-Control-Allow-Methods”, “POST, GET, PUT, OPTIONS, DELETE, PATCH”);
//Access-Control-Max-Age 用於 CORS 相關配置的緩存
response.setHeader(“Access-Control-Max-Age”, “3600”);
response.setContentType(“text/html; charset=utf-8”);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章