换个角度使用Redis去解决跨域存取Session问题

news/2025/6/21 16:23:27/

系列文章目录

Redis缓存穿透、击穿、雪崩问题及解决方法
Spring Cache的使用–快速上手篇
分页查询–Java项目实战篇
全局异常处理–Java实战项目篇
该系列文章持续更新,更多的文章请点击我的主页查看哦!


文章目录

  • 系列文章目录
  • 前言
  • 一、遇到的情况
  • 二、解决问题
    • 2.1 配置yml文件
    • 2.2 启动Redis
    • 3.3 代码编写
  • 三、效果演示
  • 总结


前言

vue3+SpringBoot做项目时,由于vue前端项目是在8080端口运行,而后端项目是在8081端口运行,前端通过跨域发送axios请求发送给后端的场景下,我以前在前后端不分离的情况下做项目登录功能做过滤器时,直接用Session就可以将用户登录的信息存到session中,过滤器只需要查看在拦截路径时对session做获取,获取成功则说明可以用户是登录成功的。也不会出现session存不进去的情况。
这次的前后端分离这个问题就出现了,下面就来解决这个问题。


一、遇到的情况

在登录controller中的login方法里,登录成功后将值存到session中

request.getSession().setAttribute("administrator",admin.getId());

但在页面中打开f12,点开应用会发现没有存储session的信息。

session中没有存入的值
这就是跨域带来的问题,后端服务器是8081端口,存session就存不到前端8080端口的session中。

二、解决问题

既然已经知道了问题,在我发现这个问题时(因为我Debug调试跟踪后端代码后发现确实执行了存session的动作,所以才会知道是跨域导致的问题)。我一开始就上网找材料,查找解决办法。搜到的大部分都是在分布式的情况下共享session问题。不太符合解决我当前遇到的问题。

查了一段时间资料后,我想到了Redis,想到了:存session、取session的过程,那能用session去存取数值,为什么不用Redis呢?这让我“如鱼得水“,在学习完Redis后还没想到Redis可以用来代替session干活,哈哈。所以我将用Redis解决问题的步骤代码分享给大家,学过Redis的应该是属于简单易懂的。

2.1 配置yml文件

在yml文件中配置Redis的基本信息。
在这里插入图片描述

2.2 启动Redis

将Redis服务器打开
在这里插入图片描述

3.3 代码编写

第一步:注入RedisTemplate

@Autowired
private RedisTemplate redisTemplate;

第二步:将登录成功的值存到Redis中

//6.登录成功,将员工id存入Redis并返回登录成功结果
redisTemplate.opsForValue().set("administrator",admin.getId());

第三步:在过滤器拦截路径后取Redis中的值。当然了,别忘了在过滤器类注入RedisTemplate

//4-1.判断登录状态,如果已登录,则直接放行if(redisTemplate.opsForValue().get("administrator") != null){/*** 设置将id存起来* */Long adminId = (Long) redisTemplate.opsForValue().get("administrator");BaseContext.setCurrentId(adminId);//放行filterChain.doFilter(request,response);return;}

三、效果演示

先打开Redis桌面管理查看值,在没有登录时是没有值的。如下图:
在这里插入图片描述
启动项目后我们登录一下,查看Redis中是否有值。
登录成功,在拦截器开的情况下也会发送axios请求查询数据库数据。所以已经证明了。
在这里插入图片描述

但我们还是看下存到Redis的值,如下图:

在这里插入图片描述
可以看到,已经实现了这个功能。使用Redis代替了session起到的作用。所以拦截器自然也知道你是登录过的,才会让行让方法能够查询数据库将数据显示到页面去。


总结

到这里使用Redis就解决了Session存取存在的跨域问题,也不叫解决session的跨域问题吧,只是换了个思路解决了同样的问题而已。我相信session也是可以解决这个问题的,应该是需要配置一些前端的代码等。我也不太清楚,但能用我们学习过的知识解决问题那不是更好吗!Redis用起来也很简单,也解决了当前的问题,我觉的是一个很不错的方法。

如果大家有更好的方法也可在评论区交流,相互学习。


http://www.ppmy.cn/news/46960.html

相关文章

【论文总结】V-Shuttle:可扩展和语义感知的 Hypervisor 虚拟设备模糊测试

介绍 这是来自2021 CCS的一篇论文,作者有GaoningPan, Xingwei Lin, Xuhong Zhang, Yongkang Jia, Shouling Ji, Chunming Wu, Xinlei Ying, Jiashui Wang, Yanjun Wu。该论文提出V-shuttle的新框架来执行管控程序的模糊测试,该框架执行可扩展和语义感知…

AVL树(C++实现)

文章目录 AVL树的概念AVL树结点定义AVL树的插入AVL树的旋转左单旋右单旋左右单旋右左双旋 AVL树的验证AVL树的性能AVL树及测试完整代码 AVL树的概念 二叉搜索树虽然可以缩短查找的效率,但如果数据有序或接近有序,那么二叉搜索树将退化为单支树,查找元素则相当于在顺序表中搜索…

WHOIS查询参考:域名注册信息的含义

以下详细说明了域名的域名所有者、管理联系人、技术联系人、付费联系人等信息的中英文含义。为注册域名和whois查询提供参考。 域名所有者注册信息含义 域名所有者(Registrant)是指域名属于谁,用于判定域名所有权。域名所有者可以是单位企业…

C语言实现顺序表--数据结构

魔王的介绍:😶‍🌫️一名双非本科大一小白。魔王的目标:🤯努力赶上周围卷王的脚步。魔王的主页:🔥🔥🔥大魔王.🔥🔥🔥 ❤️‍&#x1…

如何使用Tensorflow神经网络模型来完成兰州房价预测分析?

兰州房价预测是一个非常热门的话题,许多人都对如何预测兰州房价感兴趣。在本文中,我将介绍如何使用TensorFlow来预测兰州房价,并提供Python源代码。 首先,我们需要收集兰州的房价数据。我们可以从房地产网站或政府统计数据中获取。在本文中,我们将使用Kaggle上提供的兰州…

收音机知识,调谐(选频/滤波),调制(升频)

参考:https://www.bilibili.com/video/BV1d14y1N7nm/?spm_id_from333.999.0.0&vd_source00bd76f9d6dc090461cddd9f0deb2d51 有关知识提纲 整个信号的传输变化调谐人耳听到声音的频率范围(20~20000Hz)天线和传送信号的波长关系波长和天线…

RHCE第一次作业at和cront两个任务管理程序的区别

1.at 单一执行的例行性工作:仅处理执行一次就结束了 -m 当任务完成之后,即使没有标准输出,将给用户发送邮件 -l atq的别名,可列出目前系统上面的所有该用户的at调度 -d atrm的别名,可以取消一个在at调度中的工作 -v 使用较明显的…

pandas中df.groupby详解?

df.groupby 是 pandas 库用于实现按照某些列进行拆分,应用函数和组合的一个功能。步骤如下: 1. 按照指定的一列或多列进行分组 (grouping) 2. 对每个分组应用一个聚合函数 (aggregation) 3. 将每个分组的聚合结果合并成一个数据结构 语法: df…