领先一步
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
,此外还包括对自定义会话过期策略和规则的支持。
Apache Geode & Pivotal GemFire 的 Spring Session 现在提供了一个新的 策略 接口,SessionExpirationPolicy
,允许用户自定义有关会话如何以及何时过期的规则。
该接口的定义大致如下:
SessionExpirationPolicy 接口
import java.time.Duration;
@FunctionalInterface
interface SessionExpirationPolicy {
Optional<Duration> determineExpirationTimeout(Session session);
default ExpirationAction getExpirationAction() {
return ExpirationAction.INVALIDATE;
}
}
用户只需实现 determineExpirationTimeout
方法,该方法返回一个 Optional
java.time.Duration
,指示会话过期之前的时间长度。
Duration
是可选的,因此在某些情况下,如果您的自定义策略无法为特定会话确定过期超时,则返回 Optional.empty()
将指示 Apache Geode 或 Pivotal GemFire 应用为管理应用程序会话状态的区域配置的默认条目空闲超时过期策略。默认的空闲超时为 30 分钟,您可以通过设置 maxInactiveIntervalInSeconds 属性来更改 @EnableGemFireHttpSession 注解。
提示
或者,您可以在 Spring Boot 的 application.properties
中设置 spring.session.data.gemfire.session.expiration.max-inactive-interval-seconds
属性,或在 Spring 容器中声明类型为 SpringSessionGemFireConfigurer 的 bean 并覆盖 getMaxInactiveIntervalInSeconds() 方法。
然后,您只需在 Spring 容器中将自定义 SessionExpirationPolicy
实例声明为 bean,然后确保 Apache Geode 或 Pivotal GemFire 的 Spring Session 知道它,方法是设置 @EnableGemFireHttpSession
注解的 sessionExpirationPolicyBeanName
属性,如下所示:
@SpringBootApplication
@EnableGemFireHttpSession(
sessionExpirationPolicyBeanName = "customExpirationPolicy"
)
class MySpringSessionApplication {
@Bean
SessionExpirationPolicy customExpirationPolicy(..) {
return new CustomExpirationPolicy(..);
}
...
}
由于 SessionExpirationPolicy
实例与 Spring 容器中的任何其他托管 bean 一样都是一个 bean,因此您可以根据需要对其进行配置,注入对其他 bean 的引用等等。
提示
同样,自定义 SessionExpirationPolicy
的 bean 名称可以通过使用 spring.session.data.gemfire.session.expiration.bean-name
在 Spring Boot application.properties
中设置,或者通过在 Spring 容器中声明 SprinSessionGemFireConfigurer
的实例并覆盖 getSessionExpirationPolicyBeanName()
方法来设置。
更多详细信息可以在 文档 中找到。
除了允许自定义会话过期策略和规则外,Apache Geode & Pivotal GemFire 的 Spring Session 还提供了该接口的实现以支持固定时长过期超时。
这在会话无论如何都应在固定时长后超时的情况下很有用,例如 1 小时,前提是会话尚未超时。
此请求实际上是在核心 Spring Session 问题 #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 会谨慎地遵守会话的空闲超时。因此,会话将在空闲超时或固定超时到期时过期,以先到者为准。
同样,更多详细信息可以在 文档 中找到。
与往常一样,非常感谢您的反馈。直到下次,编码愉快!
项目页面 | 问题 | PR | StackOverflow