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

news2024/12/22 23:57:39

系列文章目录

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.coloradmin.cn/o/433142.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

golang 云效私有模块依赖拉取配置

相关文档 阿里官方文档 go 环境变量配置 export GOPRIVATEcodeup.aliyun.com 凭证设置 非常找重要,https密码配置克隆账户和克隆密码后续会用到 在 可以在 netrc 文件中指定凭据 Linux\MacOS 文件应该存放在执行账户的根目录下,即:~/.netrc sudo v…

SAS 9.3软件安装包下载及安装教程 办公软件

SAS 9.3软件简介: SAS 9.3是目前行业软件中的一款专业的数据统计分析软件,其核心功能包括高级分析、商业智能、客户智能、数据管理、风险管理和欺诈与安全智能六大模块,通过sas软件提供创新的分析、商业智能和数据管理软件与服务&#xff0c…

3Dsmax丨3dsmax2016软件下载安装教程 含全版本软件详细安装流程

大家好~随着计算机技术的发展,3D建模在各个行业中被广泛应用。以游戏行业为例,通过3D建模模型制作、灯光制作、材质渲染、细节润色、渲染合成等能够制作出游戏原神、王者荣耀、和平精英、英雄联盟、明日之后、光遇、哈利波特、剑网3、我的世界、第五人格…

SQL——关于bjpowernode.sql的33道经典例题之1-17

目录 1 查询每个部门最高薪水的人员名称 2 查询哪些人的薪水在部门平均薪水之上 3 查询每个部门的平均薪水等级 3.1 每个部门的平均薪水的等级 3.2 每个部门的平均的薪水等级 4 查询最高薪水(不用max函数) 5 查询平均薪水最高的部门的部门编号 …

如何使用 GPT-4 为博客目录页打造炫酷前端效果

前不久我用 cmd markdown 写了篇文章《项目 TO 的自我修养》,文章的目录如下: 当我把它发布到线上后,目录却只展示出了二级标题: 这哪行!我猜这个可能就是加个配置啥的就能修复。于是马上就问 GPT-4 怎么办&#xff1f…

25.SSM-SpringMVC延续--拦截器与异常处理思想

目录 一、拦截器。 (1)拦截器的作用。 (2)拦截器与过滤器的区别。 (3)拦截器的方法。 (4)拦截器的快速入门。 (5)多拦截器。 (5.1&#xf…

哈工大软件构造-设计模式笔记

文章目录 UML简单知识1.单例模式2.工厂方法模式3.迭代器模式4.策略模式5.建造者模式6.模板方法模式7.代理模式8.责任链模式9.抽象工厂模式10.适配器模式11.观…

计算机操作系统复习记录(总结 —— 快速入门和快速复习)

1. 操作系统 概念:是控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其它软件接口和环境,它是计算机系统中最基本的系统软件。 功能和目标: (1&…

数据库同步 Elasticsearch 后数据不一致,怎么办?

1、实战线上问题 Q1:Logstash 同步 postgreSQL 到 Elasticsearch 数据不一致。 在使用 Logstash 从 pg 库中将一张表导入到 ES 中时,发现 ES 中的数据量和 PG 库中的这张表的数据量存在较大差距。如何快速比对哪些数据没有插入?导入过程中&am…

六:内存回收

内存回收: 应用程序通过 malloc 函数申请内存的时候,实际上申请的是虚拟内存,此时并不会分配物理内存。 当应用程序读写了这块虚拟内存,CPU 就会去访问这个虚拟内存, 这时会发现这个虚拟内存没有映射到物理内存&…

系统安全及应用

目录 一、账号安全控制 1)系统账号清理 2)密码安全控制 chage命令 示例 3)命令历史限制 4)终端自动注销 总结 账号安全 密码安全 二、系统引导和登录控制 1)使用su命令切换用户 用途及用…

【学习笔记】字节数据和字节字符串(b“ “)那些事

文章目录 0 前言1 先来看看C语言中怎么处理这种字节数据1.1 使用总结 2 再来看看Python当中是怎么处理字节数据的 0 前言 最近在尝试用PyQt做一个上位机,遇到很多关于字节字符串的问题,这里简单总结几个关键点。 1 先来看看C语言中怎么处理这种字节数据…

RK3568平台开发系列讲解(Linux系统篇)共享内存的创建和映射过程

🚀返回专栏总目录 文章目录 一、共享内存的创建和映射过程流程梳理二、如何创建共享内存?三、如何将共享内存映射到虚拟地址空间?沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们一起学习下共享内存的创建和映射过程。 一、共享内存的创建和映射过程流程梳…

推荐5款重度电脑用户也未必知道的小众软件

作为一个重度电脑用户,你可能会经常使用一些软件来完成各种任务和娱乐。但是你知道有哪些好用的WIN10软件吗?今天我就为你介绍一下我推荐的五款WIN10软件,它们分别是: 1.反恶意软件——Malwarebytes Malwarebytes是一款专业的反…

AOP与SpringBoot使用AOP实例

AOP:Aspect Oriented Programming(面向切面编程、面向方面编程),其实就是面向特定方法编程。 动态代理是面向切面编程最主流的实现。而SpringAOP是Spring框架的高级技术,旨在管理bean对象的过程中,主要通过…

浅谈thrift协议+举例通用mockserver如何实现

目录 简单来说: 举个例子: 简单来说: 1)是一个跨平台跨语言的通信协议,定义和创建跨语言服务,是一个高性能、轻量级RPC框架。 2)开发者无需关注不同语言/相同语言服务间如何通信,…

基于html+css的图片展示15

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

什么是Python?

目录 Python简介 Python发展史 Python优点与缺点 Python现如今的应用领域 总结 Python简介 Python是一种高级、解释型、面向对象的动态编程语言,由Guido van Rossum在1989年创建,首次发布于1991年。 Python设计的哲学是优雅、清晰、简单&#xff0c…

Windows逆向安全(一)之基础知识(八)

if else嵌套 这次来研究if else嵌套在汇编中的表现形式,本次以获取三个数中最大的数这个函数为例子,分析if else的汇编形式 求三个数中的最大值 首先贴上代码: #include "stdafx.h"int result0; int getMax(int i,int j,int k)…

机器视觉工程师必须知道机器视觉精度要思考哪些

​在和客户交流项目技术要求,这个项目,我要求的精度是0.01mm? 第一个问题:什么是精度? 精度要求0.01mm: 1.视觉重复性极差?静态?动态? 2.视觉与第三方相关性差异?极差?相关性系数? 3.整体系统误差?机械重复性误差? 4.产品尺寸公差? 第二个问题:精度与公差…