写了Access-Control-Allow-Origin,还报跨域错误解决过程


如果出现,XXX属性值为null,而且前端报Access-Control-Allow-Origin这样的错误。
在这里插入图片描述
在这里插入图片描述
这种时候由于前端的报错不像后端那样具体明显,可以快速的根据异常信息定位到那一行代码发生的错误,让人很头疼,我在多次碰壁后总结了一下这个问题:

  • 第一:首先Access-Control-Allow-Origin这个问题,第一个想到的应该是跨域问题是否解决,一般解决办法是在你的应用中添加跨域组件(配置类),或者是加@CrossOrigin注解解决。
  • 第二:当然如果你使用了nginx做反向代理,那一定也要记得检查一下nginx的config配置文件。
  • 第三:如果已经解决了跨域问题,那就检查后端接口是否正确,返回数据是否符合前端要求,而且要注意的是返回的数据属性和前端接收的属性是否要求一致(这里很容易出现错误,但是很难发现,大小写问题、符号问题等)。
    检查后端接口的工具:PostMan,Swagger
  • 第四:前两步没有问题,那么一定是前端在访问接口时的路径、提交方式、提交参数导致访问不到接口,也会报出这样的错误。一般方法是在js中打上断点,采用debugger的方式,一步一步的检查方法调用过程中那些数据出现了问题,直到找到,或者直至采用console.log()直接输出数据信息来进行检查,检查哪里为null了,检查那么没有调用到。

这里分享我的一个比较坑的一个错误,以上四步我都检查完毕,但是还是解决不了问题,最后发现,我的接口中用到的参数是HttpServletRequest对象,这个对象容易获得,所以不存参数问题,所以后端接口是可以直接访问的,但是在这个接口中我用HttpServletRequest对象在获取Cookie时出现了问题,因为在前端setCookie没有成功,导致这里一直没有获取到cookie,数据返回一直为null,而访问其他接口时又用到这个数据,导致其他接口出现如上Access-Control-Allow-Origin错误。