Springboot解决跨域

@CrossOrigin

@CrossOrigin(origins = "*")
@RestController
public class HelloController {
    // @CrossOrigin(origins = "*")
    @GetMapping("/hello")
    public String hello() {
        return "hello";
    }
}

@CrossOrigin 注解可以用在控制器类上,此时该控制器中的所有接口都支持跨域;也可以用在指定接口上,让这个接口支持跨域访问。可以看到@CrossOrigin需要配置在每个控制器类中,属于局部配置,无法做到一次性配置,会有些重复工作,后边介绍的方案则不会有这样的问题。

@CrossOrigin 注解可以配置以下属性:

origins:允许的域,* 表示所有,一般可以指定具体的域,
allowedHeaders:允许的请求头字段,* 表示所有
exposedHeaders:哪些响应头可以作为响应的一部分暴露出来
methods:允许的请求方法(GET、POST…),* 表示所有
allowCredentials:是否允许浏览器发送凭证信息,例如 Cookie
maxAge: 预检请求的有效期,有效期内不用再发出预检请求

addCorsMappings 配置类

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**") // 可以被跨域请求的接口,/**此时表示所有
                .allowedMethods("*") 
                .allowedOrigins("*")
                .allowedHeaders("*") 
                .allowCredentials(false) 
                .exposedHeaders("") 
                .maxAge(3600);
    }
}

这种方式和@CrossOrigin方式要配置的属性基本一样,大致原理也类似,都是在DispatcherServlet中触发跨域处理,配置了一个CorsConfiguration对象,然后用该对象创建CorsInterceptor拦截器,然后在拦截器中调用DefaultCorsProcessor#processRequest方法,完成对跨域请求的校验。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值