重启项目后Session依旧存在的问题研究

news2024/11/27 14:26:41

1. 背景

最近在开发对接智谱AI超拟人大模型,放了方便在pom.xml中引入了热部署相关的依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

登录校验基于Session,把登录的用户信息保存到Session对象中。

@PostMapping("/login")
public BaseResponse login(HttpServletRequest request, @RequestBody User user) {
    if (user != null && StringUtils.isNotBlank(user.getName()) && StringUtils.isNotBlank(user.getPassword())) {
        String name = user.getName();
        String password = user.getPassword();

        User tempUser = userService.login(name, SecureUtil.md5(password));
        if (tempUser != null) {
            Map<String, String> map = new HashMap<>();
            map.put("id", String.valueOf(tempUser.getId()));
            map.put("name", tempUser.getName());
            map.put("email", tempUser.getEmail());
            map.put("phone", tempUser.getPhone());
            // 保存用户的登录状态
            HttpSession session = request.getSession(true);
            session.setAttribute("user", tempUser);
            return BaseResponse.success(map);
        } else {
            return BaseResponse.error(ErrorCode.USERNAME_PASSWORD_ERROR);
        }
    }
    return BaseResponse.error(ErrorCode.MISS_PARAMS);
}

然后在拦截器中判断能否从这个Session对象中获取对用户信息,如果可以就放行,否则拦截。

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    HttpSession session = request.getSession(true);
    Object user = session.getAttribute("user");
    if (user != null) {
        return true;
    }
    request.getRequestDispatcher("/error/login").forward(request, response);
    return false;
}

2. 问题

首先我们第一次启动项目后,登录进入系统,然后重启项目,不用重新请求登录接口,直接就可以访问其它接口。

也就是这个Session在项目重启之后还存在,即Session持久化到硬盘中了,才会导致每次重启项目之后这个Session还存在的问题。

3. 解决问题

3.1 解决方式一

修改application.yml配置文件

server:
  servlet:
    session:
      persistent: false

注入persistent的值为false,也就是不持久化。

注意:其实内部默认值就是false,是引入的依赖中修改了这个值,所以导致内部值自动变为true,从而导致的重启项目之后还会存在上次登录的Session信息。

3.2 解决方式二

注意:去掉依赖之后一定要记得点击右侧的刷新按钮,不要没点击刷新就直接点击clean,这样是没有效果的,项目内部还是会存在这两个依赖。

image-20240206173943308
更多内容欢迎访问博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1456414.html

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

相关文章

一元函数微分学【高数笔记】

1. 什么是微分&#xff1f;什么是微商&#xff1f; 2. 什么是函数的微分&#xff1f; 3. 在函数的微分中&#xff0c;有什么样的关系&#xff1f; 4. 一元函数的微分运用在什么题型中&#xff1f; 5. 什么是一元函数&#xff1f;

【JavaScript】实现下--刘谦春晚魔术:约瑟夫环的数学魅力!

2024年春晚刘谦的魔术堪称惊艳全场&#xff0c;那么他这个魔术实现的原理是什么呢&#xff1f;今天&#xff0c;就让咱们使用 JS 是实现这个魔术。 约瑟夫环问题简介&#x1f3b4;&#x1f50e; 约瑟夫环问题源自古罗马&#xff0c;由历史学家约瑟夫斯提出&#xff0c;而它的…

【STM32】硬件SPI读写W25Q64芯片

目录 基础知识回顾&#xff1a; SPI外设简介 SPI框图 主模式全双工连续传输 非连续传输 初始化SPI外设 核心代码 - 交换一个字节 硬件接线图 Code 程序配置过程 MySPI.c MySPI.h W25Q64.c W25Q64.h W25Q64_Ins.h main.c 基础知识回顾&#xff1a; 【STM32】SP…

Linux CentOS系统安装SQL Server并结合内网穿透实现公网访问本地数据

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&…

Android---Retrofit实现网络请求:Java 版

简介 在 Android 开发中&#xff0c;网络请求是一个极为关键的部分。Retrofit 作为一个强大的网络请求库&#xff0c;能够简化开发流程&#xff0c;提供高效的网络请求能力。 Retrofit 是一个建立在 OkHttp 基础之上的网络请求库&#xff0c;能够将我们定义的 Java 接口转化为…

汽车网络安全--关于供应商网络安全能力维度的思考

目录 1.关于CSMS的理解 2.OEM如何评审供应商 2.1 质量评审 2.2 网络安全能力评审 3.小结 1.关于CSMS的理解 最近在和朋友们交流汽车网络安全趋势时&#xff0c;讨论最多的是供应商如何向OEM证明其网络安全能力。 这是很重要的一环&#xff0c;因为随着汽车网络安全相关强…

一文解千惑:3D PCB电路板功能分区的关键要素

随着科技的不断发展&#xff0c;3D PCB电路板已成为电子工程领域的新宠。与传统的平面电路板相比&#xff0c;3D PCB电路板具有更多的优势&#xff0c;如更高的集成度、更强的信号传输能力和更小的体积。然而&#xff0c;要充分利用3D PCB电路板的优点&#xff0c;功能分区的关…

【C++】C++11中

C11中 1.lambda表达式2.可变参数模板3.包装器 1.lambda表达式 在前面我们学习过仿函数。仿函数的作用到底是干什么的呢&#xff1f; 它为了抛弃函数指针&#xff01; 主要是因为函数指针太难学了 就比如下面这个&#xff0c;看着也挺难受的。 它的参数是一个函数指针&#x…

【C项目】无头单向不循环链表

简介&#xff1a;本系列博客为C项目系列内容&#xff0c;通过代码来具体实现某个经典简单项目 适宜人群&#xff1a;已大体了解C语法同学 作者留言&#xff1a;本博客相关内容如需转载请注明出处&#xff0c;本人学疏才浅&#xff0c;难免存在些许错误&#xff0c;望留言指正 作…

ai图片放大老照片ai处理ps学习

老照片处理 1.bigjpg&#xff1a;AI人工智能图片放大 体验后评价&#xff1a;快速稳定 2.jpgHD&#xff1a;同bigjpg 另支持老照片上色 付费可用&#xff1a;破损修复&#xff0c;魔法动态照片 3.bigmp4&#xff1a;ai视频无损放大 4.jpgrm&#xff1a;ai擦除 利用2023年最先进…

Java入门及环境变量

文章目录 1.1 Java简介1.2 JDK的下载和安装1.3 第一个程序1.4 常见问题1.5 常用DOS命令1.6 Path环境变量 1.1 Java简介 下面我们正式进入Java的学习&#xff0c;在这里&#xff0c;大家第一个关心的问题&#xff0c;应该就是 Java 是什么&#xff0c;我们一起来看一下&#xf…

VMware Workstation 17安装教程:创建虚拟机

虚拟机软件的管理界面 新建虚拟机向导 设置硬件兼容性 设置系统的安装来源 选择操作系统的版本 未完待续&#xff0c;明天继续更新&#xff0c;如有疑问&#xff0c;点击链接加入群聊【信创技术交流群】&#xff1a;http://qm.qq.com/cgi-bin/qm/qr?_wv1027&kEjDhISXNgJlM…

CV论文--2024.2.19

1、Self-Play Fine-Tuning of Diffusion Models for Text-to-Image Generation 中文标题&#xff1a;自我对弈微调扩散模型&#xff0c;用于文本到图像生成 简介&#xff1a;在生成人工智能&#xff08;GenAI&#xff09;领域&#xff0c;微调扩散模型仍然是一个未被充分探索的…

App启动优化笔记 1

app大致的启动流程。有Launcher进程,system_server进程,zygote进程,APP进程。 Launcher进程:启动activity来启动应用 system_server进程:(ams是其中的一个binder):发送一个socket消息给Zygote。 zygote进程:收到消息后,fork新的进程,---》app进程启动 APP进程:…

Google发布能自我学习能力的Gemini 1.5

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 这波ai浪潮&#xff0c;进化的越来越强大和实用了&#xff0c;OpenAi刚发布了文生视频大模型Sora。而Google发布能了具有自我学习能力的Gemini 1.5。 Google 的大模型以及 AI 聊天机器人都采用 Gemini 这一名称。前…

唯一客服系统:Golang开发客服系统源码,支持网页,H5,APP,微信小程序公众号等接入,商家有PC端管理和H5,可以配置AI智能回复(搭建部署教程)

本系统采用Golang Gin框架GORMMySQLVueElementUI开发的独立高性能在线客服系统。客服系统访客端支持PC端、移动端、小程序、公众号中接入客服&#xff0c;利用超链接、网页内嵌、二维码、定制对接等方式让网上所有通道都可以快速通过本系统联系到商家。 服务端可编译为二进制程…

微软和OpenAI将检查AI聊天记录,以寻找恶意账户

据国外媒体报道&#xff0c;大型科技公司及其附属的网络安全、人工智能产品很可能会推出类似的安全研究&#xff0c;尽管这会引起用户极度地隐私担忧。大型语言模型被要求提供情报机构信息&#xff0c;并用于帮助修复脚本错误和开发代码以侵入系统&#xff0c;这将很可能会成为…

【JVM篇】什么是运行时数据区

文章目录 &#x1f354;什么是运行时数据区⭐程序计数器⭐栈&#x1f50e;Java虚拟机栈&#x1f388;栈帧的内容 &#x1f50e;本地方法栈 ⭐堆⭐方法区 &#x1f354;什么是运行时数据区 运行时数据区指的是jvm所管理的内存区域&#xff0c;其中分为两大类 线程共享&#xf…

Unity导出Android studio项目遇到的aar无法打包问题

Android Studio 接入现有aar 前因,开发过程中,发现Unity打包出来的android包,带有aar,随着android studio打包的过程中,发现要么提示aar要从网络下载,下载不到,要么提示当前aar不能直接在本地引入(玄学,之前一直不会),会导致损坏。 原因,Android studio版本高,An…

OpenCV中inRange函数

在OpenCV中&#xff0c;inRange函数用于根据颜色范围从图像中提取特定的颜色区域。这个函数检查输入图像中的每个像素&#xff0c;如果像素值位于指定的范围内&#xff0c;则在输出图像&#xff08;或掩码&#xff09;中对应位置的像素被设置为白色&#xff08;或者说是255&…