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”);