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
相关文章
|
7月前
|
存储 缓存 NoSQL
Redis的神奇之处:为什么它如此快速?【redis第三部分】
Redis的神奇之处:为什么它如此快速?【redis第三部分】
67 0
|
存储 缓存 NoSQL
Redis最基础内容
Redis最基础内容
57 0
|
存储 NoSQL 算法
【Redis 系列】redis 学习五,多学习一些 redis 的三种特殊数据类型
【Redis 系列】redis 学习五,多学习一些 redis 的三种特殊数据类型
|
存储 JSON NoSQL
[Redis]Redis常用命令与常见数据类型(下)
[Redis]Redis常用命令与常见数据类型(下)
|
2月前
|
存储 缓存 监控
介绍一下Redis的使用方法
【10月更文挑战第19天】介绍一下Redis的使用方法
|
2月前
|
缓存 分布式计算 NoSQL
大数据-43 Redis 功能扩展 Lua 脚本 对Redis扩展 eval redis.call redis.pcall
大数据-43 Redis 功能扩展 Lua 脚本 对Redis扩展 eval redis.call redis.pcall
37 2
|
6月前
|
NoSQL Redis
|
6月前
|
缓存 自然语言处理 NoSQL
【Redis】存入redis的值,莫名其妙多了很多“\u0000”
Redis缓存异常,取出的值前出现`\u0000`或部分被覆盖。问题源于误用`set(key, value, expireTime)`方法,该方法实际上按指定偏移量追加覆盖,而非设置完整值,导致额外填充`\u0000`。正确方法应为`set(key, value, timeout, TimeUnit.SECONDS)`来设置键值对和过期时间。使用重载方法时需仔细理解参数含义,避免混淆。
324 0
|
7月前
|
NoSQL Redis Ruby
1、Redis字符串
1、Redis字符串
|
7月前
|
存储 缓存 NoSQL
Redis性能滑坡:哈希表碰撞的不速之客【redis第二部分】
Redis性能滑坡:哈希表碰撞的不速之客【redis第二部分】
89 0