前后端分离获取后端session为null,session跨域问题

2023-11-09

1. 前后端分离中session的状态

以前前后端都在一起的时候,没有跨域的问题,session是可以确定的,但是在跨域的时候,我每次访问,都会像是新的一台主机访问我的服务器,就会造成session的新建,所以不能能访问到原来的session数据
还是我只能用浏览器的sessionStroger

2.解决办法

**2.1 前端

前端跨域访问后端接口, 在浏览器的安全策略下默认是不携带cookie的, 所以每次请求都开启了一次新的会话

所以我们就需要前端发送的数据中可以包含被后端识别

axios.defaults.withCredentials = true;
(设置cross跨域 并设置访问权限 容许跨域携带cookie信息)

注意!!!-》需要所有请求前添加
列如:

//设置cross跨域 并设置访问权限 容许跨域携带cookie信息
axios.defaults.withCredentials = true;
//通过axios向后端发送post请求
axios.post('http://localhost:8002/stujava/getSession',role).then(function (res) {
	if(res.data[0] !=null){
		that.session_vue.login=res.data[0][0];
		sessionStorage.removeItem("userName");
		sessionStorage.setItem("userName",that.session_vue.login.userName);
	}else{
		alert("未登录");
		window.location.replace('../../')
	} 
    
    }).catch(function (error) {
    alert(error);
    });

2.2 后端
1.前端发送过来的数据已经携带了cookie,那么我们怎样识别出来呢?
2.如同我们上面说的,每发送一次链接,后端都会以为是一台新的主机来访问,所以我们就需要针对每一次请求来进行处理。
这里我们就需要用到拦截器

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("经过了拦截器");
        response.setHeader("Access-Control-Allow-Origin",request.getHeader("Origin"));//支持跨域请求
        response.setHeader("Access-Control-Allow-Methods", "*");
        response.setHeader("Access-Control-Allow-Credentials", "true");//是否支持cookie跨域
        response.setHeader("Access-Control-Allow-Headers", "Authorization,Origin, X-Requested-With, Content-Type, Accept,Access-Token");//Origin, X-Requested-With, Content-Type, Accept,Access-Token
        return true;
    }
 
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        System.out.println("controller 执行完了");
    }
 
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        System.out.println("我获取到了一个返回的结果:"+response);
        System.out.println("请求结束了");
    }
  1. preHandle方法:每次调用链接都会执行一次,里面写我们的逻辑代码
  2. postHandle方法:Controller层执行完后会执行
  3. afterCompletion方法:最后执行

我们需要注册到适配器中

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
 
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
    }
}

实现类在注解扫描包下自行创建

2.3 测试

@RequestMapping("login")
    public List login(HttpServletRequest request,@RequestBody Login login){
        List list = loginService.LoginByAll(login);
        if (list.size()==1){
            HttpSession session=request.getSession();
            session.setAttribute(login.getRole(), list);
            System.out.println("session="+session.getAttribute(login.getRole()));
        }
        System.out.println(request.getSession().getAttribute(login.getRole()));
        return list;
    }
    @RequestMapping("getSession")
    public List getSession(HttpServletRequest request,@RequestBody Login login){
        System.out.println(login);
        System.out.println(request.getSession().getAttribute(login.getRole()));
        List list=new ArrayList<>();
        list.add(request.getSession().getAttribute(login.getRole()));
        return list;
    }

结果
在这里插入图片描述

3.总结

1.需要在前端代码每次发送请求时添加 axios.defaults.withCredentials = true 这段代码
2.配置拦截器注册到适配器中

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前后端分离获取后端session为null,session跨域问题 的相关文章

随机推荐

  • Java设计模式 -9- 桥接模式(Bridge模式)

    Java设计模式 9 桥接模式 Bridge模式 前言 桥接模式的定义与特点 优点 缺点 桥接模式的结构与实现 1 模式的结构 2 模式的实现 桥接模式的应用实例 桥接模式的应用场景 桥接模式的扩展 前言 结构型模式描述如何将类或对象按某种
  • Spring boot中使用Jackson ObjectMapper注入

    为什么80 的码农都做不了架构师 gt gt gt 问题 本身spring boot已经集成了Jackson的库 我想自己在Controller中直接使用Spring默认的ObjectMapper 应该怎么做 RestController
  • 配置数据库属性validationQuery

    配置数据库时 属性validationQuery默认值为 select 1 对于oracle值应为 select 1 from dual validationQuery属性 用来验证数据库连接的语句 这个语句至少是返回一条数据的查询语句 每
  • Linux 宝塔面板密码忘记解决方法

    打开远程链接命令窗口或shell窗口 输入一下命令 cd www server panel python tools pyc panel passwd passwd为修改后的密码 返回的就是面板登录用户名 我的为 admin 2 如果提示多
  • 有用的网站

    http blog csdn net column details ms100 html
  • python3下载网页视频_三种下载网页视频的的方法(亲测!非常详细)

    原标题 三种下载网页视频的的方法 亲测 非常详细 大家好 我是莲妈 今天给大家带来三种网页视频的下载方法 公众号 努力的Lotus 里科普资源栏里已经为大家准备好了相关安装包以及命令指令 1 you get 2 IDM Internet D
  • Python爬虫——个股的股价与成交量分析

    一 前言 写在前面 不是人人都是巴菲特 作为普通小韭菜不要幻想一夜暴富 踹开临门一脚 投点小钱 进去冲个浪还是挺有意思的 注意总结经验 最大程度的减少被割的概率 年轻人还是要脚踏实地 股谚云 股市上什么都能骗人 唯有成交量不能骗人 成交量通
  • 商品期货保证金返还吗(期货保证金可以取回吗)

    期货的保证金是否返还 平仓后不管盈亏保证金都会返还给你 只是亏损方会扣除亏损后把剩余部分返还 而盈利方会全额返还还加上盈利部分 期货保证金交了以后 在交割完成以后 还退不退保证金 期货保证金交了以后 在交割完成以后 还退不退保证金要看自己是
  • python 线性相关 与 线性拟合

    文章目录 线性相关 皮尔逊相关系数 stats pearsonr 斯皮尔曼相关系数 stats spearmanr 线性拟合 回归 最小二乘法 optimize least squares R方 sklearn metrics r2 sco
  • vscode开发油猴插件环境配置指南

    文章目录 一 环境配置 1 1油猴插件开始编写代码 1 2油猴插件配置 1 2 1浏览器插件权限 1 2 2插件自身权限 2 油猴脚本API学习 2 1 头文件 2 2 油猴API 一 环境配置 1 1油猴插件开始编写代码 在vscode
  • 关于滴滴智能调度的分析和思考

    写这篇分析的背景是 工作上正在经历一个智能调度平台的搭建和设计 希望通过对于滴滴调度系统进行调研 来得出一些可借鉴的 优秀的设计方案 本质上来讲 一个好的调度系统 就是要解决资源最优利用的问题 这个在之前的文章做过简单的介绍 见 调度系统的
  • u盘打开提示格式化怎么办?有用的方法来了

    u盘打开提示格式化怎么办 u盘是常用的一款数据存储设备 但不少网友在使用u盘的过程中 都遇到过这样的一个问题 就是u盘无法打开且提示需要将其格式化 有网友使用u盘的时候操作不当 直接拔插u盘导致u盘损坏需要格式化才能继续使用 但是里面保存有
  • 16、门面模式

    文章目录 package com example demo designpattern 门面模式 外观模式 结构型模式 隐藏系统的复杂性 并向客户端提供了一个客户端可以访问系统的接口 它向现有的系统添加一个接口 来隐藏系统的复杂性 门面模式
  • git密码重置后如何登录

    本地以管理员身份打开Git Bash终端 输入 git config global user name 用户名 git config global user email 邮箱 然后执行 git config global credentia
  • java 企业工程管理系统软件源码 自主研发 工程行业适用

    工程项目管理软件 工程项目管理系统 对建设工程项目管理组织建设 项目策划决策 规划设计 施工建设到竣工交付 总结评估 运维运营 全过程 全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一 系统管理 1 数据字典 实现对数据字典标签
  • 提取有效css,webpack4:提取、压缩css(公共部分)、消除多余css

    css提取 mini css extract plugin 1 安装 npm i mini css extract plugin D 或 npm i extract text webpack plugin next D 2 webpack配
  • 阿里云+wordpress搭建个人博客网站【小白专用的图文教程】

    声明 欢迎转载 但请保留文章原始出处 生命壹号 http www cnblogs com smyhvae 文章来源 http www cnblogs com smyhvae p 4965163 html 正文 在阿里云上搭建使用个人博客主要
  • AVCLabs Video Enhancer AI v2021.0.9 智能视频增强工具

    前言 AVCLabs Video Enhancer AI 可以通过应用 AI 技术的力量来提升视频的分辨率 这种基于 AI 的视频增强器使用基于深度学习的超分辨率技术将视频从 480p 到 1080p 720p 到 UHD 以及从 1080
  • 具连接centos7下的数据库时出现1130-host “**” is not allowed to connect to this mariadb server 的错误解决方法

    centos7环境下在完成mariadb安装后 在端口与防火墙均为正常的情况下 出现了1130 Host xxx is not allowed to connect to this MariaDb server 的情况 进入mysql数据库
  • 前后端分离获取后端session为null,session跨域问题

    1 前后端分离中session的状态 以前前后端都在一起的时候 没有跨域的问题 session是可以确定的 但是在跨域的时候 我每次访问 都会像是新的一台主机访问我的服务器 就会造成session的新建 所以不能能访问到原来的session