SecurityContextHolder 和 Redis 的区分

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Despite both being involved in session management, they serve distinct purposes: `SecurityContextHolder` for security context and Redis for broader data caching and management.

在跟着博主三更草堂学习spring- security的课程中。我发现了我作为一个初学者可能需要理解知识点(如题)。

下载.png

SecurityContextHolderRedis 各自的作用:

  1. SecurityContextHolder:

    • SecurityContextHolder 是 Spring Security 框架提供的一个类,用于在应用程序中保存当前已经被验证的用户的安全上下文信息。
    • 通过 SecurityContextHolder,可以访问当前用户的身份信息,权限信息以及其他相关的安全信息,以便在应用程序中进行访问控制和权限管理。
    • 这个上下文信息通常在应用程序的生命周期中持续存在,直到用户退出或会话结束。
  2. Redis:

    • Redis 是一个开源的内存数据库,通常被用作缓存、消息代理和键值存储。
    • 在 Java Web 应用程序中,Redis 经常被用来缓存数据,例如用户会话信息、页面内容或其他需要频繁读取的数据。
    • 使用 Redis 缓存可以提高应用程序的性能和扩展性,减轻数据库负担,并且可以实现分布式缓存,使多个应用程序实例可以共享缓存数据。

SecurityContextHolderRedis 分别存储的信息:

  1. SecurityContextHolder:

    • SecurityContextHolder 是 Spring Security 框架中的一个类,用于在应用程序中保存当前已验证用户的安全上下文信息。
    • 这个上下文信息通常包括当前用户的身份信息、权限信息以及其他相关的安全信息。
    • 以下是一些可能存储在 SecurityContextHolder 中的信息:
      • 认证用户的身份信息(例如用户名、用户ID等)。
      • 认证用户的权限信息(例如角色、权限列表等)。
      • 认证用户的认证状态(已认证、未认证等)。
  2. Redis:

    • Redis 是一个高性能的键值存储数据库,通常用作缓存、消息代理和数据存储。
    • 在 Java Web 应用程序中,Redis 经常被用来缓存数据、会话信息以及其他需要频繁读取或共享的数据。
    • 以下是一些可能存储在 Redis 中的信息:
      • 会话信息:包括用户的认证状态、会话标识符、会话数据等。
      • 缓存数据:存储经常访问但不经常更改的数据,例如页面内容、计算结果等。
      • 分布式锁:用于处理并发访问和确保数据的一致性。
      • 消息队列数据:用于实现异步处理和事件驱动架构。

为什么有 SecurityContextHolder 还需要 Redis

@Override
    public ResponseResult logout() {
   
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        LoginUser loginUser = (LoginUser) authentication.getPrincipal();
        Long userid = loginUser.getUser().getId();
        redisCache.deleteObject("login:"+userid);
        return new ResponseResult(200,"退出成功");
    }

SecurityContextHolder 主要用于存储当前已验证用户的安全上下文信息,包括身份和权限信息,以便进行访问控制和权限管理。而 Redis 则用于存储缓存数据、会话信息以及其他需要频繁读取或共享的数据,以提高应用程序的性能和可扩展性。

因此,在代码实现执行登出操作时,删除 Redis 中的相关信息。不需要删除 SecurityContextHolder 的相关信息。(清除缓存,不需要清除对应用户的权限)

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
5月前
|
存储 缓存 NoSQL
Redis的主要用途是什么?
【4月更文挑战第2天】Redis是多功能工具,常用于缓存加速、轻量级数据库、消息代理(发布/订阅)、分布式锁、计数器、数据结构算法实现、实时系统支撑及限流控制。其丰富的数据类型和高效操作支持多种应用场景,提升系统性能。
269 2
|
5月前
|
存储 监控 负载均衡
Redis如何处理大量数据?
Redis高效处理大数据依赖内存存储、多样数据结构及优化策略:选择适合的数据结构,利用批量操作减少网络开销,控制批量大小避免性能下降,通过Redis Cluster分布式存储扩展处理能力,优化内存使用和序列化,监控系统性能并持续调优。
184 4
|
4月前
|
机器学习/深度学习 存储 NoSQL
【Redis】 关于Redis列表类型
【Redis】 关于Redis列表类型
|
4月前
|
NoSQL Redis
【Redis】 常见的基本全局命令
【Redis】 常见的基本全局命令
|
5月前
|
消息中间件 NoSQL 关系型数据库
"通俗介绍:什么是 Redis ? "
Redis 是一款内存中的数据存储系统,常用于数据库、缓存、消息中间件和流式引擎。它的特点是速度快,尤其在分布式系统中发挥优势,允许不同进程间共享内存中的数据。相比传统数据库如 MySQL,Redis 访问更快但存储空间有限,适合存储热点数据以提升性能。Redis 也可作为 MySQL 的缓存,但涉及数据同步问题。最初设计目的是作为消息中间件,但现在有更多专门的消息队列系统可选。
39 0
|
消息中间件 存储 缓存
redis 为什么可以做缓存?redis 的作用有哪些?redis 常见的使用场景
redis 为什么可以做缓存?redis 的作用有哪些?redis 常见的使用场景
538 0
|
NoSQL 数据库 Redis
Redis6学习(二):Redis中的键操作
Redis6学习(二):Redis中的键操作
Redis6学习(二):Redis中的键操作
|
监控 NoSQL Redis
Redis(二十八)- Redis的哨兵模式
这篇文章将介绍另外一种模式—哨兵模式,该模式在master宕机之后可以自动从各个slave中选举一个作为新的master。
281 0
Redis(二十八)- Redis的哨兵模式
|
存储 NoSQL Java
Redis(九)-Redis的常用数据类型之Hash表
Redis hash 是一个键值对集合,
94 0
|
存储 NoSQL Java
Redis三种特殊类型
Redis三种特殊类型
116 0