您的位置:首页 > 编程语言 > Java开发

踩坑记录之:关于springboot中ajax跨域和session共存问题

2019-01-07 16:56 1636 查看

                                              前言

    这1年多一直用springboot写项目,项目都是采用前后端分离的这种。其实所谓前后端分离就是指将我们的前端html与我们的后端代码分开,后端只负责做业务处理,前端只需要做前端的工作。所以这样子前端想和后端进行交互就涉及到了--跨域。

    因为我自己也主要是从事后端,前端也多少懂一些。这里说下我之前写项目遇到的问题,当时做一个业务,需要将前端的表单传递到后端,并保存在session当中作为后续业务的传递。然后就遇到了个问题,前端页面中的值可以成功保存到后端的session当中,但是另一个页面提交数据后,传递到后端需要根据之前保存的session值做比对。然后就出现对比的时候,session中的值取不到了,是null值。然后业务就走不下去了。

     后来也是查阅资料,发现了一个坑,我之前的代码是这样写的:

因为springboot中是有支持跨域的,直接在类上加上@CrossOrigin注解,这个注解的意思就是支持前端所有跨域header。

然后Postmapping里要加上一个参数:consumes ="application/x-www-form-urlencoded" 表示是表单数据发送编码类型

然后html页面的ajax 里也需要加上  contentType:"application/x-www-form-urlencoded"

 然后我的跨域请求是成功提交的,也保存在了session中,但是在后续的业务里 就取不到这个session了。这到底是什么原因呢?

后来查阅了各种资料,最后点进去看了@CrossOrigin的源码,发现:

 这个注解类默认并没有开启对session跨域的一个共享,所以需要自己去开启对跨域参数的一个session授信,在@CrossOrigin的参数里,手动添加2个参数,允许跨域传输所有的header参数,并支持session共享。

 然后前端的也要做适配:

然后再启动项目后就可以把值保存到session并成功的传递到各个业务当中了。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: