Spring 反应式的 Spring Security 会话超时

2023-12-03

我有一个集成了 Spring Security 的反应式应用程序,它是由 springinitializr 创建的,主要包含 3 个包(spring boot、spring security 和 webflux)。

我试图通过以下配置来配置会话超时application.properties:

spring.session.timeout=1m

启动应用程序后mvn spring-boot:run, 可以通过以下方式访问http://localhost:8080它要求我登录(默认安全设置)。我可以使用用户名user以及控制台生成的登录密码。

根据我的配置,我预计在 1 分钟空闲时间后,当我刷新页面时http://localhost:8080再次,它可以要求我重新登录。但事实上并没有,直到30分钟后

所以我怀疑上面的配置不起作用

我使用了错误的配置吗?

可以在这里找到重现存储库:https://github.com/ZhuBicen/ReactiveSpringSecurity.git


Spring 可能应该允许针对上述情况对反应式堆栈进行自动配置,就像对 servlet 所做的那样。

然而,“会话”是状态,除非有一些持久存储支持,否则该状态不会扩展。您可以将 Spring Session 抽象与内存中的ReactiveSessionRepository即使您(还)没有像 Redis 之类的后备存储。当您确实获得适当支持的后备存储并添加相应的依赖项时,您可以删除内存中的内容ReactiveSessionRepository因为 Spring Boot 会自动配置你的ReactiveSessionRepository为你。

首先添加spring session依赖

    <dependency>
      <groupId>org.springframework.session</groupId>
      <artifactId>spring-session-core</artifactId>
    </dependency>

其次,手动创建您的ReactiveSessionRepository豆。 (注意:如果您使用 Redis 而不是内存等,则可以为您自动配置)

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.session.SessionProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.ReactiveMapSessionRepository;
import org.springframework.session.ReactiveSessionRepository;
import org.springframework.session.config.annotation.web.server.EnableSpringWebSession;

import java.util.concurrent.ConcurrentHashMap;

/**
 * This ReactiveSessionRepository isn't auto-configured so we need to create it and manually set the timeout on it.
 * Later, ReactiveRedisSessionRepository will be auto-configured so we can delete this
 */
// https://www.baeldung.com/spring-session-reactive#in-memory-configuration
@Configuration
@EnableSpringWebSession
@RequiredArgsConstructor // if lombok
@Slf4j // if lombok
public class SessionConfig {

    private final SessionProperties sessionProperties;

    @Bean
    public ReactiveSessionRepository reactiveSessionRepository() {
        ReactiveMapSessionRepository sessionRepository = new ReactiveMapSessionRepository(new ConcurrentHashMap<>());
        int defaultMaxInactiveInterval = (int) sessionProperties.getTimeout().toSeconds();
        sessionRepository.setDefaultMaxInactiveInterval(defaultMaxInactiveInterval);
        log.info("Set in-memory session defaultMaxInactiveInterval to {} seconds.", defaultMaxInactiveInterval);
        return sessionRepository;
    }
}

三、设置属性spring.session.timeout=3600.

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

Spring 反应式的 Spring Security 会话超时 的相关文章

随机推荐

  • 在 FSharp 中查找两个数组之间的差异

    我有两个数组 我想在第二个数组中查找不在第一个数组中的元素 我写了以下代码 let array0 A B C let array1 B D E let inZero letter array0 gt Array tryFind fun l
  • 使用 jsoup 解析 JavaScript

    In an HTML页面 我想选择 a 的值javascript多变的 下面是片段HTML page
  • AutoMapper 将 2 个表中的记录连接到单个 IEnumerable 视图模型中

    我有 2 张桌子 比如说T1 and T2 T1包含oID CID 日期 状态 and T2包含cID cName cURL 我为上面两个表设计了类 如下所示 T1 cs public class T1 public int oID get
  • PHP 中的枚举

    我知道 PHP 还没有原生枚举 但我已经习惯了 Java 世界中的它们 我很乐意使用枚举来提供 IDE 的自动完成功能可以理解的预定义值 常量可以解决问题 但是存在命名空间冲突问题 或者实际上because 它们是全球性的 数组不存在命名空
  • 在C#中发送TCP数据包

    我想在 C 中发送 TCP 数据包 带有自定义标头 构建此类数据包没有问题 并且我将数据存储在字节数组中 但是我怎样才能通过套接字发送这个数据包呢 我尝试过这样的事情 using Socket sock new Socket Address
  • 将附加组件集成到自定义 Firefox 版本中

    我正在制作一个自定义的 Firefox 版本 我想将我的附加组件 附加 SDK 集成到构建中 我更喜欢这样做 而不是直接与 Firefox 代码集成 实现这一目标的最佳方法是什么 我正在考虑将其放入 浏览器 扩展 目录 如果这是一个好主意
  • 查找大写字符然后添加空格

    我购买了 SQL World 城市 州数据库 在州数据库中 州名称被集中在一起 示例 北卡罗来纳州 或 南卡罗来纳州 SQL中有没有办法循环查找大写字符并添加空格 这样 北卡罗来纳州 就变成了 北卡罗来纳州 创建这个函数 if object
  • java 8 中箭头运算符内部如何工作? [复制]

    这个问题在这里已经有答案了 我知道箭头的左侧有参数 箭头的右侧是参数所在的函数 但是 我想知道java 8如何映射左侧和右侧并转换为函数 那里会发生什么 我在哪里可以找到信息 当你有一个 gt javac 编译器添加一个包含代码内容的静态方
  • 如何在 React 中下载图像?

    我想尝试通过单击按钮来下载图像 但是当我单击按钮时 它不是下载图像 而是直接打开图像 但是我想下载图片 那么在React中如何下载图片呢 a href https timesofindia indiatimes com thumb msid
  • 如何使用 python pyhs2 连接到 hive?

    我正在尝试使用访问配置单元pyhs2 我尝试了以下代码 示例 py import pyhs2 conn pyhs2 connect host localhost port 10000 authMechanism None user None
  • Shibboleth 可以与 Windows Azure 访问控制服务集成吗?

    我们的两个高等教育客户使用 Shibboleth 进行 SSO 我对 Shib 的经验为零 并且没有可供测试的实例 最终 我们希望将 Shib SSO 与 Windows Azure MVC Web 角色中的这些客户端集成 所以我的问题是
  • 检测数组 vb.net 2005 上重复数字的最快方法

    我有这个项目 让用户输入从 1 到 50 的 5 个不同的数字 但我想在保存到数据库之前验证它 我将是 5 个唯一的数字 最好和最快的方法是什么 您可以使用哈希集 T 的 检查这个 Dim numbers As IEnumerable Of
  • 如何更改面板滚动条的背景颜色?

    因此 我正在为我的应用程序制作一个深色模式选项 并且我希望滚动条的背景颜色也改变颜色 这样它就不会看起来不合适 我试图寻找解决方案 但到目前为止我只找到了控件中滚动条的代码 但我需要更改面板的滚动条 有人知道该怎么做吗 预先非常感谢 当我开
  • 如何将 SecureString 转换为 System.String?

    关于通过创建 System String 来取消 SecureString 的所有保留意见aside 如何做呢 如何将普通的 System Security SecureString 转换为 System String 我相信许多熟悉 Se
  • Cassandra 与日志记录活动

    我将卡桑德拉与昆德拉一起使用 我的问题很简单 有什么方法可以记录所有查询 请求到 Cassandra 吗 我想知道服务器站点上到底发生了什么 Regards Tom 为 org apache cassandra thrift Cassand
  • 在服务中处理 $http 响应

    我最近发布了我面临的问题的详细描述here在这样 因为我无法发送实际的 http请求时 我使用超时来模拟异步行为 在 Gloopy 的帮助下 从我的模型到视图的数据绑定工作正常 现在 当我使用 http代替 timeout 本地测试 我可以
  • 我的“重复排列”代码中的递归调用是否会累积而堵塞 RAM?

    一些背景知识 我是一名业余程序员 几个月前 在学习了一段时间的 Mathematica 编程 我的第一语言 之后 我利用业余时间学习了 Haskell 我目前正在阅读 Will Kurt 所著的第二本 Haskell 书 但要让自己对 Ha
  • 音频无法在 Android 中播放。 android.content.res.Resources$NotFoundException:资源 ID #0x0

    我正在尝试在 Android 中播放音频文件 但它似乎崩溃并给出了ResourcesNotFoundException 音频文件保存在 res 内的 raw 文件夹中 音频文件的名称由随机生成的数字确定 然后将其连接到 音频 int res
  • 如何关闭 iframe?

    打开 iframe 后 有时需要关闭它 到目前为止 我只是将 iframe 从其父节点中删除 从而将其与 DOM 断开 但是 我发现这并不会立即结束 iframe 的生命 并且它的 javascript 代码仍然可以回调到父窗口 而父窗口不
  • Spring 反应式的 Spring Security 会话超时

    我有一个集成了 Spring Security 的反应式应用程序 它是由 springinitializr 创建的 主要包含 3 个包 spring boot spring security 和 webflux 我试图通过以下配置来配置会话