拦截器导致的@CrossOrigin注解失效的问题

        一般后台有两种方式可以防止跨域问题。

        1.通过使用CrossOrigin注解

        2.使用一个CrossOriginConfig的配置类。

        我比较喜欢使用第一种,比较简单。但是有一天发现即使使用了@CrossOrigin注解,依然总是报跨域请求的问题。这是为什么呢?

        前置知识:

        浏览器在需要发送一些特殊的请求的时候(content-type为application/json,put,delete请求等),会提前发送一个preflight request称为预检请求。如果预检请求发现后台服务器不支持跨域或者不支持某些特殊的请求方式的时候,就不会发送真正的请求了,这个时候就会出现“provisional Headers are shown”这种错误,意思就是展示了临时的响应头,而没有真正的发送过请求。

        那么如题,我这个问题是如何产生的呢,正是由于我有一个拦截器,它拦截到了浏览器发出的预检请求(OPTIONS方法)。但是OPTIONS的预检请求通常都不会携带任何的数据,这个时候就很有可能被拦截器所拦截,也就导致预检请求拿不到它所需要的服务器是否支持跨域啊,服务器支持哪些请求方式的信息,从而导致不会发送真正的请求了,也就出现了上面所说的"provisional Headers are shown"这种错误的出现了,解决方式有两种。

       1.不使用@CrossOrigin注解,而是使用CrossOriginConfig,通过一个filter来解决跨域。

       2.在拦截器里面对OPTIONS方法进行放行,让预检请求能够获取到它所需要的服务器是否支持跨域,支持哪些请求方式等信息。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值