spring boot--优雅解决跨域
1、单个路由允许跨域
@CrossOrigin:通过为路由设置CrossOrigin 允许单个路由进行跨域
@CrossOrigin //此注解允许当前路由跨域请求 @RequestMapping("/login") public Object login(@RequestParam String phone) throws Exception { return "登陆成功"; }
@CrossOrigin可以添加一些参数配置
@CrossOrigin(value = "*",methods = {RequestMethod.POST}) //允许所有域名,并且只有post请求能够跨域访问 @RequestMapping("/login") public Object login(@RequestParam String phone) throws Exception { return "登陆成功"; }
参数:
- value、origins属性:配置允许访问的源,如: http://anxminise.cc,
*
表示允许全部的域名 - methods属性:配置跨域请求支持的方式,如:GET、POST,且一次性返回全部支持的方式
- maxAge属性:配置预检请求的有效时间, 单位是秒,表示:在多长时间内,不需要发出第二次预检请求
- allowCredentials属性:配置是否允许发送Cookie,用于 凭证请求, 默认不发送cookie
- allowedHeaders属性:配置允许的自定义请求头,用于 预检请求
- exposedHeaders属性:配置响应的头信息, 在其中可以设置其他的头信息,不进行配置时, 默认可以获取到Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma字段
2、全局路由允许跨域
1. 通过WebMvcConfigurer类
@Configuration public class CorsConfig { @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/*") .allowedOrigins("*") //.allowCredentials(true) //这个是可以否携带凭证响应请求,默认值是false。凭证可以是Cookie ,授权标头或 TLS 客户端证书,一般都是cookie。值得一提的是:如果你将他设置为true,那么需满足这些要求才能正常访问 .allowedMethods("GET", "POST", "DELETE", "PUT", "PATCH") .maxAge(3600); WebMvcConfigurer.super.addCorsMappings(registry); } }; } }
2.通过WebMvcConfigurationSupport类
@Configuration public class CorsConfig extends WebMvcConfigurationSupport { @Override protected void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") // .allowCredentials(true) //这个是可以否携带凭证响应请求,默认值是false。凭证可以是Cookie ,授权标头或 TLS 客户端证书,一般都是cookie。 .allowedMethods("*") .allowedOrigins("*") .allowedHeaders("*"); super.addCorsMappings(registry); } }
3.类方法对应改变的响应头字段