运用sessionId redis中获取用户的信息rg.springframework.session.SessionRepository

这个类是 org.springframework.session.SessionRepository 接口,它定义了操作 Session 的基本方法。SessionRepository 是 Spring Session 框架的一部分,用于管理和存储用户的 HTTP Session。下面是这个接口的详细解释:

SessionRepository<S extends Session> 接口

这个接口定义了一些基本的方法,用于管理和存储 Session 实例。S 是 Session 的类型参数,表示具体的 Session 类型。

方法列表
  1. S createSession()

    • 描述: 创建一个新的 Session 实例,并确保它可以被持久化存储。
    • 返回值: 返回一个新的 Session 实例。
  2. void save(S session)

    • 描述: 保存给定的 Session 实例。有些实现可能选择在 Session 被修改时立即保存,而其他实现可能选择批量保存。在这种方法中,必须确保 Session 被持久化存储。
    • 参数: session - 需要保存的 Session 实例。
  3. S findById(String id)

    • 描述: 根据 Session ID 查找并返回 Session。如果没有找到对应的 Session,则返回 null。
    • 参数: id - 要查找的 Session 的 ID。
    • 返回值: 返回找到的 Session 实例,如果没有找到则返回 null。
  4. void deleteById(String id)

    • 描述: 根据 Session ID 删除 Session。如果没有找到对应的 Session,则不做任何操作。
    • 参数: id - 需要删除的 Session 的 ID。

具体实现

Spring Session 提供了多种 SessionRepository 的实现,例如基于 Redis、JDBC、Hazelcast 等。具体实现会根据不同的存储介质来实现这些方法。

示例解释

假设你使用的是 Redis 作为存储介质,下面是一个可能的实现:

import org.springframework.session.data.redis.RedisOperationsSessionRepository;
import org.springframework.session.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class SessionService {@Autowiredprivate RedisOperationsSessionRepository sessionRepository;public Session getSessionById(String sessionId) {return sessionRepository.findById(sessionId);}public void saveSession(Session session) {sessionRepository.save(session);}public void deleteSession(String sessionId) {sessionRepository.deleteById(sessionId);}
}
使用示例

假设你有一个控制器来处理 Session 的请求:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.session.Session;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/session")
public class SessionController {@Autowiredprivate SessionService sessionService;@GetMapping("/getUserBySession")public Map<String, Object> getUserBySession(@RequestParam("sessionIdBase64") String sessionIdBase64) {Map<String, Object> response = new HashMap<>();// 解码 Base64 编码的 Session IDbyte[] decodedBytes = java.util.Base64.getDecoder().decode(sessionIdBase64);String sessionId = new String(decodedBytes);// 获取 SessionSession session = sessionService.getSessionById(sessionId);if (session != null) {// 提取用户信息SimplePrincipalCollection principalCollection = (SimplePrincipalCollection) session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY);if (principalCollection != null) {Object primaryPrincipal = principalCollection.getPrimaryPrincipal();response.put("user", primaryPrincipal);} else {response.put("error", "No principal found in session.");}} else {response.put("error", "No session found with the given ID.");}return response;}
}

总结

  • SessionRepository 接口定义了一些基本的操作方法,用于管理和存储 Session 实例。
  • 不同的存储介质会有不同的具体实现,比如 Redis、JDBC 等。
  • 通过 SessionRepository 接口,你可以方便地创建、保存、查找和删除 Session 实例。

希望这些解释能帮助你更好地理解 SessionRepository 接口。

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

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

相关文章

Sentinel-1 Level 1数据处理的详细算法定义(二)

《Sentinel-1 Level 1数据处理的详细算法定义》文档定义和描述了Sentinel-1实现的Level 1处理算法和方程&#xff0c;以便生成Level 1产品。这些算法适用于Sentinel-1的Stripmap、Interferometric Wide-swath (IW)、Extra-wide-swath (EW)和Wave模式。 今天介绍的内容如下&…

C++:CV::Point函数简介

cv::Point 是 OpenCV 库中用于表示二维坐标系下点的一个基本数据类型。它提供了在图像处理、计算机视觉等领域中定位和操作点的能力。以下是关于 cv::Point 的详细介绍&#xff1a; 基本属性 类型&#xff1a;cv::Point 是一个模板类&#xff0c;通常用于处理整数坐标&#x…

解决打印PDF文本不清楚的处理办法

之前打印PDF格式的电子书&#xff0c;不清晰&#xff0c;影响看书的心情&#xff0c;有时看到打印的书的质量&#xff0c;根本不想看&#xff0c;今天在打印一本页数不多&#xff0c;但PDF格式的书感觉也不太清楚&#xff0c;我想应该有办法解决&#xff0c;我使用的是解决福昕…

2017年,我成为了技术博主

2017年9月&#xff0c;我已经大三了。 >>上一篇&#xff08;爪哇&#xff0c;我初窥门径&#xff09; 我大二学了很多java技术&#xff0c;看似我一会就把javaweb/ssh/ssm这些技术栈给学了。 这些技术确实不难&#xff0c;即便是我&#xff0c;我都能学会&#xff0c;…

可以添加todo清单桌面小组件的便签哪个好?

在我们快节奏的生活中&#xff0c;有效的时间管理和任务追踪是必不可少的。为了实现这一目标&#xff0c;许多人选择使用桌面便签&#xff0c;尤其是那些具有Todo清单桌面小组件的便签。但是&#xff0c;面对市场上众多选择&#xff0c;可以添加todo清单桌面小组件的便签哪个好…

C++八股(四)之STL

目录 一、讲一下C++的STL 二、vector list异同⭐⭐ 三、vector的底层实现⭐⭐ 四、vector和deque的区别 ⭐⭐ 五、deque和queue的区别⭐⭐ 六、为什么list里面还要再定义一个sort函数⭐ 七、STL底层数据结构实现⭐ 八、利用迭代器删除元素会发生什么?⭐⭐⭐⭐ 九、map…

14 Portainer轻量级图形化监控

目录 Portainer&#xff1a;Docker轻量级可视化工具 1. 安装与访问 2. 使用 3. Portainer配置 nginx Portainer&#xff1a;Docker轻量级可视化工具 Portainer是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便地管理Docker环境&#xff0c;包括单机…

db期末复习自用[应试向 附习题]

第一章 数据库系统实现整体数据的结构化&#xff0c;主要特征之一&#xff0c;是db区别于文件系统的本质区别。 数据库系统三个阶段&#xff1a;人工、文件、数据库系统。 数据库管理系统的功能&#xff1a;数据库定义、操纵 、&#xff08;保护、存储、维护&#xff09;、数…

Jmeter在信息头中设置Bearer与 token 的拼接值

思路&#xff1a;先获取token&#xff0c;将token设置成全局变量&#xff0c;再与Bearer拼接。 第一步&#xff1a;使用提取器将token值提取出来&#xff0c;使用setProperty函数将提取的token值设置成全局变量&#xff0c;在登录请求后面添加BeanShell取样器 或者 BeanShell后…

数据结构作业/2024/7/9

2>实现双向循环链表的创建、判空、尾插、遍历、尾删、销毁 fun.c #include "head.h" //1.双向循环链表的创建 doubleloop_ptr create_list() …

STM32实战篇:按键控制LED

按键控制LED 功能要求 有两个按键&#xff0c;分别控制两个LED灯。当按键按下后&#xff0c;灯的亮暗状态改变。实物如下图所示&#xff1a; 由图可知&#xff0c;按键一端直接接地&#xff0c;故另一端所对应IO引脚的输入模式应该为上拉输入模式。 实现代码 #include "…

《C++20设计模式》中单例模式

文章目录 一、前言二、饿汉式1、实现 三、懒汉式1、实现 四、最后 一、前言 单例模式定义&#xff1a; 单例模式&#xff08;Singleton Pattern&#xff09;是一种创建型设计模式&#xff0c;其主要目的是确保一个类只有一个实例&#xff0c;并提供全局访问点来访问这个实例。…

mysql实战入门-基础篇

目录 1、MySQL概述 1.1、数据库相关概念 1.2、MySQL数据库 1.2.1、版本 1.2.2、下载 1.2.3、安装 输入MySQL中root用户的密码,一定记得记住该密码 1.2.4、启动停止 1.2.5、客户端连接 1.2.6、数据模型 2、SQL 2.1、SQL通用语法 2.2、SQL分类 2.3、DDL 2.3.1、数据…

GNU/Linux - Linux Kernel Device model

Linux 设备模型是 Linux 内核中的一个框架&#xff0c;它提供了一种统一、一致的方式来管理和表示硬件设备。设备模型抽象了硬件的细节&#xff0c;使得开发和维护驱动程序和子系统变得更加容易。以下是 Linux 设备模型的关键组成部分和概念&#xff1a; 关键组成部分 设备 (D…

算力感知网络系统架构模型、任务模型、 通信模型、计算和存储资源模型

目录 移动边缘计算——计算卸载 计算卸载 算力感知网络系统架构模型、任务模型、 通信模型、计算和存储资源模型 算力感知路由和算力资源分配 香农定理 1. 通信系统设计与优化 2. 数据压缩 3. 杂音抵消 4. 信道容量评估 香农公式计算 计算步骤 举例说明 传输信号的…

金融电商社交媒体等领域的大数据应用案例

大数据在各个行业都有广泛的应用&#xff0c;以下是几个典型领域的例子&#xff1a; 金融领域&#xff1a; 大数据帮助金融机构进行风险评估和信贷决策&#xff0c;通过收集和分析客户的交易历史、信用记录等信息&#xff0c;预测贷款违约率。例如&#xff0c;信用卡公司可以…

PHP验证日本免费电话号码格式

首先&#xff0c;您需要了解免费电话号码的格式。 日本免费电话也就那么几个号段&#xff1a;0120、0990、0180、0570、0800等开头的&#xff0c;0800稍微特殊点&#xff0c;在手机号里面有080 开头&#xff0c;但是后面不一样了。 关于免费电话号码的划分&#xff0c;全部写…

【前端从入门到精通:第十二课: JS运算符及分支结构】

JavaScript运算符 算数运算符 关于自增自减运算 自增或者自减运算就是在本身的基础上进行1或者-1的操作 自增或者自减运算符可以在变量前也可以在变量后&#xff0c;但是意义不同 自增自减运算符如果在变量前&#xff0c;是先进行自增或者自减运算&#xff0c;在将变量给别人用…

Python面试题:请解释什么是反射(reflection)?

在计算机科学中&#xff0c;反射&#xff08;reflection&#xff09;是指程序在运行时检查、修改和调用自身结构的能力。这种能力允许程序在运行时动态地获取有关其自身的信息&#xff08;如类、方法、属性等&#xff09;&#xff0c;并进行操作。反射通常用于创建灵活且可扩展…

idea集成本地tomcat

由于网课老师使用的是eclipse,但是……本人用的是idea,所以不得不去找教程。 解决方案1&#xff1a; https://blog.csdn.net/weixin_54048131/article/details/131359793 这个地方&#xff0c;路径一定要到这个tomcat 否则不识别&#xff1a; 这里的JRE也要配置一下 新问题&…