From fe378042f0871ac3ee6c02d47c9f572bc28e10b4 Mon Sep 17 00:00:00 2001 From: Ludy87 Date: Wed, 26 Mar 2025 12:05:14 +0100 Subject: [PATCH] Update AnonymusSessionService.java --- .../session/AnonymusSessionService.java | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/main/java/stirling/software/SPDF/config/anonymus/session/AnonymusSessionService.java b/src/main/java/stirling/software/SPDF/config/anonymus/session/AnonymusSessionService.java index 42584343f..c5b8d9075 100644 --- a/src/main/java/stirling/software/SPDF/config/anonymus/session/AnonymusSessionService.java +++ b/src/main/java/stirling/software/SPDF/config/anonymus/session/AnonymusSessionService.java @@ -1,9 +1,14 @@ package stirling.software.SPDF.config.anonymus.session; +import java.time.Duration; +import java.time.Instant; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; +import java.util.Date; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -15,15 +20,28 @@ public class AnonymusSessionService { @Autowired private AnonymusSessionRegistry sessionRegistry; + @Value("${server.servlet.session.timeout:120s}") // TODO: Change to 30m + private Duration defaultMaxInactiveInterval; + @Scheduled(cron = "0 0/1 * * * ?") public void expireSessions() { + Instant now = Instant.now(); List allNonExpiredSessions = new ArrayList<>(sessionRegistry.getAllNonExpiredSessions()); - if (allNonExpiredSessions.isEmpty()) { - log.info("Keine nicht abgelaufenen Sessions gefunden."); - return; - } else { - log.info("Es gibt {} nicht abgelaufene Sessions", allNonExpiredSessions.size()); + for (AnonymusSessionInfo sessionInformation : allNonExpiredSessions) { + Date lastRequest = sessionInformation.getLastRequest(); + int maxInactiveInterval = (int) defaultMaxInactiveInterval.getSeconds(); + Instant expirationTime = + lastRequest.toInstant().plus(maxInactiveInterval, ChronoUnit.SECONDS); + + if (now.isAfter(expirationTime)) { + log.info( + "SessionID: {} expiration time: {} Current time: {}", + sessionInformation.getSession().getId(), + expirationTime, + now); + sessionInformation.setExpired(true); + } } } }