抢占先机
VMware 提供培训和认证,以加速您的进步。
了解更多好事成双,我很高兴地宣布适用于 Apache Geode 和 Pivotal GemFire 的 Spring Session (SSDG) 2.0.6.RELEASE
和 2.1.0.RELEASE
已发布。
SSDG 2.0.6.RELEASE
基于 Spring Framework 5.0.10.RELEASE
、Spring Data Kay-SR11
和 Spring Session core 2.0.7.RELEASE
,主要包含依赖项更新。
另一方面,SSDG 2.1.0.RELEASE
已升级到 Spring Framework 5.1.1.RELEASE
、Spring Data Lovelace-SR1
和 Spring Session core 2.1.0.RELEASE
,并且还包括对自定义 Session 过期策略和规则的支持。
适用于 Apache Geode 和 Pivotal GemFire 的 Spring Session 现在提供了一个新的策略接口,SessionExpirationPolicy
,允许用户自定义 Session 应如何以及何时过期的规则。
该接口大致定义为
SessionExpirationPolicy 接口
import java.time.Duration;
@FunctionalInterface
interface SessionExpirationPolicy {
Optional<Duration> determineExpirationTimeout(Session session);
default ExpirationAction getExpirationAction() {
return ExpirationAction.INVALIDATE;
}
}
用户只需实现 determineExpirationTimeout
方法,该方法返回一个 Optional
java.time.Duration
,指示 Session 过期前的时长。
Duration
是可选的,以便在某些情况下,如果您的自定义策略无法确定特定 Session 的过期超时时间,则返回 Optional.empty()
将指示 Apache Geode 或 Pivotal GemFire,应应用为管理应用程序 Session 状态的 Region 配置的默认条目空闲超时过期策略。 默认空闲超时时间为 30 分钟,您可以通过设置 maxInactiveIntervalInSeconds 属性来更改此值。@EnableGemFireHttpSession 注解。
提示
或者,您可以在 Spring Boot 的 application.properties
中设置 spring.session.data.gemfire.session.expiration.max-inactive-interval-seconds
属性,或者在 Spring 容器中声明类型为 SpringSessionGemFireConfigurer 的 bean,并覆盖 getMaxInactiveIntervalInSeconds() 方法。
然后,您只需将自定义 SessionExpirationPolicy
实例声明为 Spring 容器中的 bean,然后通过设置 @EnableGemFireHttpSession
注解的 sessionExpirationPolicyBeanName
属性来确保适用于 Apache Geode 或 Pivotal GemFire 的 Spring Session 知道它,如下所示
@SpringBootApplication
@EnableGemFireHttpSession(
sessionExpirationPolicyBeanName = "customExpirationPolicy"
)
class MySpringSessionApplication {
@Bean
SessionExpirationPolicy customExpirationPolicy(..) {
return new CustomExpirationPolicy(..);
}
...
}
由于 SessionExpirationPolicy
实例与 Spring 容器中的任何其他托管 bean 一样是一个 bean,因此您可以随意配置它,注入对其他 bean 的引用等等。
提示
同样,可以使用 spring.session.data.gemfire.session.expiration.bean-name
在 Spring Boot application.properties
中设置自定义 SessionExpirationPolicy
的 bean 名称,或者通过在 Spring 容器中声明 SprinSessionGemFireConfigurer
的实例并覆盖 getSessionExpirationPolicyBeanName()
方法来设置。
更多详细信息可以在 文档中找到。
除了允许自定义 Session 过期策略和规则之外,适用于 Apache Geode 和 Pivotal GemFire 的 Spring Session 还提供此接口的实现,以支持固定时长的过期超时。
这在 Session 无论如何都应在固定时长(可能为 1 小时)后超时的情况下非常有用,前提是 Session 尚未空闲超时。
此请求实际上出现在核心 Spring Session Issue #922 - “绝对会话超时”中。
虽然此功能在 Spring Session 的所有存储提供程序中都不可用,但在 Apache Geode 或 Pivotal GemFire 中是可行的。
简单地启用以下内容
import org.springframework.session.data.gemfire.expiration.support.FixedTimeoutSessionExpirationPolicy;
@SpringBootApplication
@EnableGemFireHttpSession(
sessionExpirationPolicyBeanName = "fixedTimeoutExpirationPolicy"
)
class MySpringSessionApplication {
@Bean
SessionExpirationPolicy fixedDurationExpirationPolicy() {
return new FixedTimeoutSessionExpirationPolicyt(Duration.ofMinutes(60L));
}
...
}
当然,适用于 Apache Geode 和 Pivotal GemFire 的 Spring Session 会小心地尊重 Session 的空闲超时时间。 因此,Session 将在空闲超时时间或固定超时时间过去后过期,以先发生者为准。
同样,更多详细信息可以在 文档中找到。
与往常一样,非常感谢您的反馈。 下次再见,祝您编码愉快!
项目页面 | 问题 | PR | StackOverflow