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 "登陆成功";
    }

  参数:

  1. value、origins属性:配置允许访问的源,如: http://anxminise.cc*表示允许全部的域名
  2. methods属性:配置跨域请求支持的方式,如:GET、POST,且一次性返回全部支持的方式
  3. maxAge属性:配置预检请求的有效时间, 单位是秒,表示:在多长时间内,不需要发出第二次预检请求
  4. allowCredentials属性:配置是否允许发送Cookie,用于 凭证请求, 默认不发送cookie
  5. allowedHeaders属性:配置允许的自定义请求头,用于 预检请求
  6. 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.类方法对应改变的响应头字段

 

  

posted @ 2021-08-17 14:19  眼里有激光  阅读(158)  评论(0编辑  收藏  举报