Spring Boot+AngularJS中因为跨域导致Session丢失
2016-09-06 09:35
507 查看
如果还在为跨域问题烦恼,请查看博主的 解决angular+spring
boot的跨域问题 那篇文章。
博主在项目开发过程中,遇到了由于跨域而导致的Session丢失问题,非常的恶心,但是经过在网上查阅各种资料,发现解决方法十分简单。
在我们每一次的数据请求中,浏览器都会向后台发送一个JSession,后台会根据这个值自动查找Id为JSession的那个session对象。但是当跨域时,JSession的值每次都会改变,后台就会以为是新的一个会话打开,于是又去创建了一个新的Session对象,而原来的Session对象就找不到了。
解决这个问题的方法很简单
首先在Angular请求中将withCredentials设为true,然后每次请求的头中就会带有cookie的值,cookie中就记录了JSession值,因此Session就不会丢失了。
在AngularJS中,可以通过全局设置,使得withCredentials为true
然后让在所有的app中都注入'Utils',就会将所有的请求头中的withCredentials设置为true,这样Session就不会丢失啦。
当然也可以通过以下方法来设置当前请求的withCredentials。
然后在后台也开启.withCredentials
@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)//就是这个啦
.allowedMethods("GET", "POST", "DELETE", "PUT")
.maxAge(3600);
}
}
那么.withCredentials是干嘛的呢?
它需要前后端一起开启,开启之后就能够读写浏览器的Cookies,但是这个Cookies是完全由你要请求站点控制的,我们无法通过js去获取或改变Cookies中的值。
boot的跨域问题 那篇文章。
博主在项目开发过程中,遇到了由于跨域而导致的Session丢失问题,非常的恶心,但是经过在网上查阅各种资料,发现解决方法十分简单。
在我们每一次的数据请求中,浏览器都会向后台发送一个JSession,后台会根据这个值自动查找Id为JSession的那个session对象。但是当跨域时,JSession的值每次都会改变,后台就会以为是新的一个会话打开,于是又去创建了一个新的Session对象,而原来的Session对象就找不到了。
解决这个问题的方法很简单
首先在Angular请求中将withCredentials设为true,然后每次请求的头中就会带有cookie的值,cookie中就记录了JSession值,因此Session就不会丢失了。
在AngularJS中,可以通过全局设置,使得withCredentials为true
var utils = angular.module('Utils', []); utils.config(['$httpProvider', config]); function config($httpProvider) { $httpProvider.defaults.withCredentials = true; }
然后让在所有的app中都注入'Utils',就会将所有的请求头中的withCredentials设置为true,这样Session就不会丢失啦。
当然也可以通过以下方法来设置当前请求的withCredentials。
$http.xhr.withCredentials
然后在后台也开启.withCredentials
@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)//就是这个啦
.allowedMethods("GET", "POST", "DELETE", "PUT")
.maxAge(3600);
}
}
那么.withCredentials是干嘛的呢?
它需要前后端一起开启,开启之后就能够读写浏览器的Cookies,但是这个Cookies是完全由你要请求站点控制的,我们无法通过js去获取或改变Cookies中的值。
相关文章推荐
- Spring Boot+AngularJS中因为跨域导致Session丢失
- SpringMvc+AngularJS通过CORS实现跨域方案
- SpringMvc+AngularJS通过CORS实现跨域方案
- SpringMvc+AngularJS通过CORS实现跨域方案
- JS脚本导致Session丢失
- spring boot 的session跨域共享
- IE下PHP iframe跨域导致session丢失问题的解决方法
- springmvc + angularjs 跨域问题解决
- 使用springboot + lucence + ik +angularjs+jsoup 搜索自己博客
- Spring Boot+AngularJS+BootStrap实现进度条
- spring boot+angularjs文件下载设置setHeader
- IE下PHP iframe跨域导致session丢失问题的解决方法
- 解决angular+spring boot的跨域问题
- spring-session导致request.getInputStream流数据丢失问题
- js错误导致session丢失
- PHP关于IE的iframe跨域导致session丢失
- 试用了一下SpringBoot+AngularJS的工程生成器JHipster
- Spring Boot+AngularJS导出excel
- spring boot--整合spring session实现session共享以及cookie丢失问题解决
- SpringBoot+AngularJS+Jaspersoft Studio实现多张报表打印控制