🚧 Check expiry before using token from cache

This commit is contained in:
Andreas Dinauer 2026-04-18 16:10:46 +02:00
parent 1aebd3b50c
commit 04f1ccffcb

View File

@ -21,41 +21,9 @@ public class SessionCache
{
private final Map<String, AccessToken> tokens = new ConcurrentHashMap<>();
@Inject
Logger LOG;
@Inject
SessionService sessionService;
@Inject
EncryptUtils encryptUtils;
@Inject
AccessTokenRepository accessTokenRepository;
@Startup
@ActivateRequestContext
void housekeeping()
{
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(() -> {
LOG.info("Running housekeeping...");
List<AccessTokenEntity> sessions = accessTokenRepository.findExpiresBefore(ZonedDateTime.now().plusMinutes(2));
for (AccessTokenEntity session : sessions)
{
QuarkusTransaction.begin();
tokens.remove(session.getId());
try
{
accessTokenRepository.delete(session);
QuarkusTransaction.commit();
}
catch (Exception e)
{
QuarkusTransaction.rollback();
}
}
}, 0, 30, TimeUnit.SECONDS);
}
public String add(String accessToken, String refreshToken)
{
String sessionId = UUID.randomUUID().toString();
@ -66,10 +34,10 @@ public class SessionCache
public String get(String sessionId) throws TokenNotFoundException
{
String sessionHash = toHash(sessionId);
AccessToken token = tokens.get(sessionHash);
if (token != null)
Optional<String> token = getFromCache(sessionHash);
if (token.isPresent())
{
return token.getToken();
return token.get();
}
AccessToken fromDB = sessionService.provide(sessionHash);
tokens.put(sessionHash, fromDB);
@ -83,6 +51,20 @@ public class SessionCache
sessionService.remove(sessionHash);
}
public Optional<String> getFromCache(String sessionHash)
{
AccessToken token = tokens.get(sessionHash);
if (token != null && ZonedDateTime.now().isBefore(token.getExpiresAt()))
{
return Optional.of(token.getToken());
}
else
{
tokens.remove(sessionHash);
return Optional.empty();
}
}
private String toHash(String sessionId)
{
try