CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。 它容许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。html
response响应头:跨域
响应头字段名称 | 做用 |
---|---|
Access-Control-Allow-Origin | 容许访问的客户端的域名 |
Access-Control-Allow-Credentials | 是否容许请求带有验证信息,若要获取客户端域下的cookie时,须要将其设置为true。 |
Access-Control-Allow-Headers | 容许服务端访问的客户端请求头 |
Access-Control-Allow-Methods | 容许访问的HTTP请求方法 |
Access-Control-Max-Age | 用来指定预检请求的有效期(秒),在有效期内不在发送预检请求直接请求。 |
Cors详细介绍请看阮一峰的跨域资源共享 CORS 详解浏览器
简单粗暴,直接写个filter拦截全部请求在response头里加上面的字段.服务器
继承WebMvcConfigurerAdapter重写addCorsMappingscookie
public class CorsConfig extends WebMvcConfigurerAdapter { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedHeaders("*") .allowedMethods("*") .allowedOrigins("*"); } }
@Bean public FilterRegistrationBean corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration config = new CorsConfiguration(); config.addAllowedOrigin("*"); config.setAllowCredentials(true); config.addAllowedHeader("*"); config.addAllowedMethod("*"); source.registerCorsConfiguration("/**", config); FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source)); bean.setOrder(0); return bean; }
@CrossOrigin( origins = "*", allowCredentials = "true", allowedHeaders = "*", methods = RequestMethod.GET, maxAge = 3600 )
因为我使用了Spring Security,即便配置了响应头字段,仍是不能访问,通过反复测试,最后想到可能由于我用了Spring Security,而Spring Security拦截了个人请求,致使配置不成功.app
HttpSecurity#authorizeRequests().antMatchers(HttpMethod.OPTIONS).permitAll()