Предисловие: Требование к продукту (куча весенних загрузочных приложений), над которым я работаю, состоит в том, чтобы использовать токены JWT для обеспечения безопасности, полученные с внутреннего сервера, и использовать их для связи между службами через Вызовы REST.
Проблема: Время жизни токена JWT составляет точно 2 часа, поэтому я попытался поместить его в кеш, чтобы для заданного userId
я не получил новый токен JWT с сервера до истечения срока его действия. Эта часть работает, проблема заключалась в том, чтобы удалить кеш, когда истечет TTL.
Код выглядит следующим образом.
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.scheduling.annotation.Scheduled;
public class JWTUtility {
// Some Fake JWT Ticket
private static final String FAKE_JWT_TICKET = "";
@Cacheable(value = "jwtToken", key = "#userId", condition = "#userId != null")
public String getToken(boolean securityEnabled, String userId) {
if (!securityEnabled) {
return FAKE_JWT_TICKET;
} else {
// Proper logic to fetch and return the JWT token from Server
// Assume this works
}
}
// JWT Ticket TTL is 2 Hrs, scheduling cache evict at 1:50 Hrs
@Scheduled(fixedRate = 6600000)
@CacheEvict(value = "jwtToken", allEntries = true)
public void evictJWTTicketValues() {
//Intentionally left blank
}
}
Часть планирования не работает, как я ожидал. Вопрос в том, как запустить таймер планировщика, когда какой-то билет JWT для определенного userId
попадает в кэш jwtToken
. Я открыт для рефакторинга / переписывания logi c для вышеуказанного класса JWTUtility
полностью.