Spring Boot+AngularJS中因为跨域导致Session丢失

http://blog.csdn.net/dalangzhonghangxing/article/details/52446821

如果还在为跨域问题烦恼,请查看博主的 解决angular+spring boot的跨域问题 那篇文章。

博主在项目开发过程中,遇到了由于跨域而导致的Session丢失问题,非常的恶心,但是经过在网上查阅各种资料,发现解决方法十分简单。

在我们每一次的数据请求中,浏览器都会向后台发送一个JSession,后台会根据这个值自动查找Id为JSession的那个session对象。但是当跨域时,JSession的值每次都会改变,后台就会以为是新的一个会话打开,于是又去创建了一个新的Session对象,而原来的Session对象就找不到了。

解决这个问题的方法很简单,就是在请求中将withCredentials设为true,然后每次请求的头中就会带有cookie的值,cookie中就记录了JSession值,因此Session就不会丢失了。

AngularJS中,可以通过全局设置,使得withCredentials为true

[javascript] view plain copy

  1. var utils = angular.module(‘Utils‘, []);
  2. utils.config([‘$httpProvider‘, config]);
  3. function config($httpProvider) {
  4. $httpProvider.defaults.withCredentials = true;
  5. }

然后让在所有的app中都注入‘Utils‘,就会将所有的请求头中的withCredentials设置为true,这样Session就不会丢失啦。

当然也可以通过以下方法来设置当前请求的withCredentials。

[javascript] view plain copy

  1. $http.xhr.withCredentials
时间: 2024-10-24 12:05:35

Spring Boot+AngularJS中因为跨域导致Session丢失的相关文章

Vue+axios+spring boot遇到的问题(跨域请求)

一.点击一次按钮 会发送两次请求的问题 第一个请求 Method是OPTIONS 第二个请求 Method是POST 后台过滤器也是检测出访问了两次,但是是偶尔才会重复访问. 这是因为 跨域请求导致 每次请求前都会先发送一个空的请求检查服务器, 可以在后台过滤器加个这个: @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOExce

angularjs中关于跨域设置白名单

在config中注入$sceDelegateProvider服务使用resourceUrlWhitelist([])方法添加白名单 跨域时将method的属性设置为"jsonp"就可以访问了 app.config(["$sceDelegateProvider",function($sceDelegateProvider){ $sceDelegateProvider.resourceUrlWhitelist([ <span style="white-s

关于AngularJS中$http跨域 与 nodejs接收跨域请求(使用express-session,body-parser)的设置

1.跨域的服务端设置: 使用express挂载跨域响应中间件 app.all("*", function (req,res,next) { res.header('Access-Control-Allow-Credentials', true);// 接受携带Cookie的请求 res.header("Access-Control-Allow-Origin", "http://localhost:3000,http://192.168.1.100:3000

升级springboot 2.x 踩过的坑——跨域导致session问题

目前IT界主流前后端分离,但是在分离过程中一定会存在跨域的问题. 什么是跨域? 是指浏览器从一个域名的网页去请求另一个域名的资源时,域名.端口.协议任一不同,都是跨域. 做过web后台的童鞋都知道,跨域这种问题是比较常见的,最近我们公司需要将springboot 1.x升级到2.x,在升级之后遇到了挺多的问题,例如某些类过时了或者某些类找不到等,还有就是今天要说得session不一致的情况(eg:请求不同接口,sessionID都不一致,即session不会共享). 场景: 今天前端童鞋跟我说,

Spring Boot 2中对于CORS跨域访问的快速支持

原文:https://www.jianshu.com/p/840b4f83c3b5 目前的程序开发,大部分都采用前后台分离.这样一来,就都会碰到跨域资源共享CORS的问题.Spring Boot 2 对此提供了很好的解决方法. 更多CORS介绍,请看这里: CORS介绍 1.注解实现 在Spring Boot 2中,提供了注解的方式来对CORS跨域访问进行支持. 1.1 在方法上注解 可以将@CrossOrigin注解在方法上.这样该方法可以被跨域访问. 在方法上标注 1.2 在Controll

php中ajax跨域请求---小记

php中ajax跨域请求---小记 前端时间,遇到的一个问题,情况大约是这样: 原来的写法: 前端js文件中: $.ajax({ type:'get', url:'http://wan.xxx.com/xxx.js', success:function(data){ ......... } }) 很简单的一个ajax请求:后面在做迁移的时候,由于系统目录的安排,js文件放到了,img.xxx.com域名下,这样就设计到了跨域问题,于是就改成了这样: $.ajax({ type:'get', ur

js中各种跨域问题实战小结(二)

这里接上篇:js中各种跨域问题实战小结(一) 后面继续学习的过程中,对上面第一篇有稍作休整.下面继续第二部分: -->5.利用iframe和location.hash -->6.window.name跨域实现 利用iframe和location.hash实现跨域 想必有很多人像我之前一样,或许只知道上面文中所说的那几种方法.所以,我刚了解到可以用iframe和location.hash来实现跨域的时候,我会想,为什么他们可以实现.iframe是什么,有什么特性,location.hash是什么

Spring Boot 项目中使用JSP

1    第2-2课:Spring Boot 项目中使用JSP JSP(Java Server Pages,Java 服务器页面)是一个简化的 Servlet 设计,它是由 Sun Microsystems 公司倡导.许多公司参与一起建立的一种动态网页技术标准.JSP 技术类似 ASP 技术,它是在传统的网页 HTML(标准通用标记语言的子集)文件(.html)中插入 Java 程序段(Scriptlet)和 JSP 标记(tag),从而形成 JSP 文件,后缀名为(*.jsp).用 JSP 开

ASP.NET中Cookie跨域的问题及解决代码

ASP.NET中Cookie跨域的问题及解决代码 http://www.liyumei.net.cn/post/share18.html Cookies揭秘  http://www.cnblogs.com/zhangziqiu/archive/2009/08/06/cookies-javascript-aspnet.html 最近在项目开发中遇到一个很棘手的问题,一个用户在顶级域名登录后,跳转到自己所拥有的二级域名下管理二级网站时,cookie丢失了,一直找解决办法找了整整两天,百度谷歌一大堆,