在redis服务器上设置spring会话

2024-01-27

我正在使用 Spring Boot 编写我的其余 api。我正在尝试维护 redis 服务器上的用户会话。 Redis 已启动并在默认端口上运行6379。我使用生菜罐连接到 redis 服务器。但似乎我的会话没有在 Redis 服务器上设置。我尝试使用 uuid 获取会话对象集,它返回类似这样的内容

127.0.0.1:6379> get 02978830-2f35-47b7-a367-1f48e40d0ea0
(nil)

从 redis cli,我可以设置和获取键值。

127.0.0.1:6379> set 123 123dummy
OK
127.0.0.1:6379> get 123
"123dummy"
127.0.0.1:6379> 

这是代码片段,我试图根据用户的活动会话来查看用户是否已登录,如果会话存在,那么我将返回用户。否则,我将记录它们,然后在 Redis 服务器上设置会话,然后返回用户。

UserAttributes findUserByEmailIdOrPhoneNumber(HttpServletRequest request,
      @RequestParam(value = "userLoginWay", required = false) String userLoginWay,
      @RequestParam(value = "userPassword", required = false) String userPassword,
      @RequestParam(value = "session", required = false) String session) {
    if(request.getSession().getAttribute(session) != null) {
        //we have session return user
        return user;
    } else {
        login(userLoginWay, userPassword)
        //set the session in redis here
        String sessionUuid = UUID.randomUUID().toString();
        request.getSession().setAttribute(sessionUuid, user);
        return user;
    }
}

该用户是我尝试将其设置为会话值并将 uuid 设置为键的对象。 这就是我尝试连接到 redis 服务器的方式

@Configuration
@EnableRedisHttpSession
public class SessionConfig extends AbstractHttpSessionApplicationInitializer {

    @Bean
    public LettuceConnectionFactory connectionFactory() {
        return new LettuceConnectionFactory();
    }

}

这就是我所拥有的application.properties

#Configuring Redis server to manage sessions
spring.session.store-type=redis
spring.redis.host=localhost
spring.redis.port=6379

知道这有什么问题吗?


好的,所以我自己得到了它,我在会话配置类中做了一些更改并通过扩展来初始化它AbstractHttpSessionApplicationInitializer

@EnableRedisHttpSession
public class SessionConfig {

    @Bean
    public LettuceConnectionFactory connectionFactory() {
        return new LettuceConnectionFactory();
    }
}

通过扩展AbstractHttpSessionApplicationInitializer,确保 Spring Bean 的名称为springSessionRepositoryFilter为每个请求向我们的 Servlet 容器注册。欲了解更多信息,请参阅this https://docs.spring.io/spring-session/docs/current/reference/html5/guides/java-redis.html

public class SessionConfigInitializer extends AbstractHttpSessionApplicationInitializer {

    public SessionConfigInitializer() {
        super(SessionConfig.class);
    }
}

之后,当我查看 redis 服务器时,我可以看到类似的内容

127.0.0.1:6379> keys '*'
1) "spring:session:expirations:1597497540000"
2) "spring:session:index:org.springframework.session.FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME:admin"
3) "spring:session:sessions:expires:dc2172eb-2282-4600-9cd3-7f5d9bbb62b8"
4) "spring:session:sessions:dc2172eb-2282-4600-9cd3-7f5d9bbb62b8"
127.0.0.1:6379> 

另一方面是来自 Redis 服务器,一旦您设置了会话,根据您设置的值,您需要检索它。 Redis支持六种类型string, list, set, zset, hash and stream。就我而言,它是散列,因此要查看命令的值HGETALL <key>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在redis服务器上设置spring会话 的相关文章

随机推荐

  • 阻止Win32绘制经典标题栏

    我想为我的无边界窗体添加一个漂亮的阴影 我发现以最小的性能损失实现这一点的最佳方法是使用DwmExtendFrameIntoClientArea https msdn microsoft com en us library windows
  • 如何在java中将csv中的值插入数据库

    我已尝试使用以下代码来拆分 csv 值 现在如何将其插入到数据库中 我是否已将值保存到单独的变量中以匹配列名称 我无法弄清楚 注意 我现在不想使用任何 csv 解析器 我只想手动完成 public static void main Stri
  • “渲染”错误后,Ajax“更新”正常吗?

    我可以向由于渲染选项先前设置为 false 而尚未渲染的 JSF 组件发送 Ajax 更新 命令吗 render BackingBean doRender doRender 设置为true就在 更新 发送之前 这是正确的方法吗 我正在使用
  • 如何在代码中查找hadoop作业的作业ID?

    我有一个有循环的 Hadoop 程序 在循环的每次迭代中都会创建一个作业 如何在代码中找到职位 ID 当您提交您的Job例如 您可以使用以下命令获取有关作业 ID 的信息getJobID method Configuration confi
  • 我应该一次加载数据库结果还是发出多个请求?

    我想用以下列过滤大型数据库 名称 最大高度 最小高度 范围 最大角度 最小角度 我想过滤它以匹配用户之前可以插入的某些条件 例如如果用户输入最大高度 80厘米 它应该显示最大高度小于80厘米的所有条目的列表 用户还可以输入更多条件 输入看起
  • 如何避免 TailerListener 中的旧日志消息

    我正在使用 Apache Commons Tailer API 来监视日志文件 每当我重新启动应用程序时 也会显示旧的日志消息 相反 只应显示新的日志消息 如何避免这种获取旧日志消息的行为 你用过吗4 参数Tailer构造函数 http c
  • 为什么C++运算符重载要求“至少有一个类类型的参数”?

    C Primer 第 5 版 第 14 1 章写道 运算符函数必须是类的成员 或者至少具有一个类类型的参数 例如 string hello world 编译 hello world 没有 当我想要超载时 在两个 C 弦上 std strin
  • Gmail API 错误 429rateLimitExceeded 即使没有任何活动

    我有一个与 Gmail API 集成的 NodeJS 应用程序 当我尝试访问 Gmail API 时 出现以下错误 error errors domain usageLimits reason rateLimitExceeded messa
  • 如果Android应用程序在可调试的情况下发布会发生什么?

    黄金法则是在向公众发布 Android 应用程序之前将可调试选项设置为关闭 如果我打开 忘记关闭 此选项会发生什么 我的意思是 它会如何向用户体现 我测试了一下 没有发现任何区别 它如何向用户体现 普通用户不会注意到其中的差异 顺便一提 支
  • Python:Selenium Firefox Webdriver 失败并出现错误:“无法加载配置文件...WARN addons.xpi...”

    我正在尝试运行以下 Python 代码来通过 Selenium 创建 Firefox Webdriver 窗口 from selenium import webdriver driver webdriver Firefox driver g
  • 如何将阿拉伯数字转换为int?

    我在 C 中工作一个项目 需要使用阿拉伯数字 但它必须作为整数存储在数据库中 我需要一个解决方案将阿拉伯数字转换为 C 中的 int 请问有什么解决办法或帮助吗 提前致谢 来自评论 我有阿拉伯数字 如 必须转换为 1 2 3 或 转换为 2
  • 将具有子项的实体类型发布到 (MVC Web Api) OData 服务

    我一直在寻找以下问题的答案 但到目前为止还没有找到 OData 标准是否支持执行包含带有子实体对象的实体对象的 POST 请求 如果是这样 ASP NET MVC Web Api OData 框架 EntitySetController 支
  • 唯一ID计数器

    过去几天我发布了几个有关我正在开发的 Google Apps 脚本 Web 应用程序的问题 到目前为止 Serge 在这里非常有帮助 该脚本的帖子是here https stackoverflow com questions 1530251
  • Intellij 警告:从未使用该方法的返回值

    我有一些代码看起来没问题 但 Intellij IDEA 警告其许多方法return价值观 从未使用该方法的返回值 这是下面的实际代码 一个构建器类 public static class StreamParserBuilder optio
  • Google Colab 中的 Tensorflow Federated 教程在初始化代码片段中给出错误

    这是开始教程之前需要运行的单元 test skip true tensorflow federated nightly also bring in tf nightly which can causes a duplicate tensor
  • facebook登录空指针异常android

    我通过 stackoverflow 进行了很多搜索 但找不到解决我的问题的答案 因此我发布此内容 我有一个示例 Android 应用程序 我尝试在其中使用 facebook 登录 以下是我遵循的步骤 环境 Android Studio An
  • 使用 jQuery 检查加载时是否已选中复选框

    我目前正在使用 some box click function main box toggle 效果很好 除非复选框是保存复选框状态的页面的一部分 如果将复选框保存为选中状态 则主框 单击该复选框时会显示 在重新加载时隐藏 并且仅在单击该复
  • AngularJS $http 拦截器

    JavaScript 代码 commonApp angular module commonApp config function httpProvider httpProvider interceptors push myHttpInter
  • 导航抽屉组标题 - 如何设置?

    我有一个菜单 其中包含如下所示的组 是否可以为每个组设置标题 我知道这对于子菜单是可能的 但是第一级组呢 menu menu
  • 在redis服务器上设置spring会话

    我正在使用 Spring Boot 编写我的其余 api 我正在尝试维护 redis 服务器上的用户会话 Redis 已启动并在默认端口上运行6379 我使用生菜罐连接到 redis 服务器 但似乎我的会话没有在 Redis 服务器上设置