后端项目使用CrossOrigin注解解决跨域的问题,但是再使用httpServletRequest.getSession时session对象不能共享同一个域的”值“
简单的说就是如果你只是单纯的使用了注解CrossOrigin可以解决跨域,但是还是需要进行简单的配置才能使用httpServletRequest对象
比如后端分离项目中
httpServletRequest.getSession.setAttribute(user,"111")。你set进去uesr的值为一,但是再下一个请求之后你想要获取该值是获取不到的。
解决方法:后端项目中将CrossOrigin的allowCredentials=”true“,allowedHeaders=”*“ 配置即可。原理就是改变CrossOrigin的默认值。有兴趣的看下查看CrossOrigin注解的源码。
allowCredentials=”true“其实是配置了CrossOrigin中的DEFAULT_ALLOWED_HEADERS熟悉:允许跨域传输所有的header参数,将用于使用token放入header域做session共享的跨域请求。如下图,在方法或者类上面加该注解即可
前端再使用ajax时记得要配置xhrFields属性:意思是将该ajax的请求变为一个允许跨域授信的请求。
前后端配置成功后
大功告成。有不同见解的同学欢迎讨论
更新
最新的CrossOrigin注解以及更改。使用如下
@CrossOrigin(origins = {"*"}, allowCredentials = "true")