适用于 Apache Geode/Pivotal GemFire 的 Spring Session 2.0.6.RELEASE 和 2.1.0.RELEASE 已发布!

工程 | John Blum | 2018 年 10 月 26 日 | ...

好事成双,我很高兴地宣布适用于 Apache Geode 和 Pivotal GemFire 的 Spring Session (SSDG) 2.0.6.RELEASE2.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 过期策略和规则的支持。

自定义 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

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

抢占先机

VMware 提供培训和认证,以加速您的进步。

了解更多

获取支持

Tanzu Spring 在一个简单的订阅中为 OpenJDK™、Spring 和 Apache Tomcat® 提供支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区中所有即将举行的活动。

查看全部