Рубрики
Без рубрики

Очистка просроченных токенов, генерируемых регистрацией

Быстрая записи о том, как очистить просроченные маркеры регистрации проверки, которые остались позади процесса регистрации.

Автор оригинала: baeldung.

1. Обзор

В этом учебнике – мы продолжаем текущей Регистрация в весеннем совете серия настройка запланированной задачи для очистки истекла ПроверкаТокен секунда. В процессе регистрации ПроверкаТокен сохраняется. В этой статье мы покажем, как удалить эти сущности.

2. Удаление просроченного токена

Напомним, из предыдущей статьи в серии что токен проверки имеет срок действияDate , представляющий срок действия маркера:

@Entity
public class VerificationToken {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String token;

    @OneToOne(targetEntity = User.class, fetch = FetchType.EAGER)
    @JoinColumn(nullable = false, name = "user_id", 
      foreignKey = @ForeignKey(name="FK_VERIFY_USER"))
    private User user;

    private Date expiryDate;
    ...
}

Мы будем использовать этот срок действияDate свойства для генерации запроса с помощью Spring Data.

Если вы ищете более подробную информацию о весенних данных JPA, посмотрите на эту статью .

2.1. Операция по удалению

Для облегчения удаления токенов мы добавим новый метод в наш ПроверкаТокенРеспозиторий для удаления просроченных токенов:

public interface VerificationTokenRepository
  extends JpaRepository {

    void deleteByExpiryDateLessThan(Date now);
}

Использование запрос ключевых слов МеньшеТэн указывает на данные Spring Data создание запросов механизм, который нас интересует только токены, срок действияDate свойства меньше указанного времени.

Обратите внимание, что, ПроверкаТокен имеет @OneToOne связь с Пользователь отмечен FetchType.EAGER , также выдается выбор для заполнения Пользователь сущность – хотя подпись удалитьByExpiryDateLessThan имеет обратный тип недействительными :

select 
    *
from 
    VerificationToken verification 
where 
    verification.expiryDate < ?

select 
    * 
from
    user_account user 
where
    user.id=?

delete from 
    VerificationToken
where
    id=?

2.2. Удаление с помощью JP’L

Кроме того, мы можем создать запрос JP’L, если у нас нет необходимости загружать объекты в контекст сохранения:

public interface VerificationTokenRepository
  extends JpaRepository {

    @Modifying
    @Query("delete from VerificationToken t where t.expiryDate <= ?1")
    void deleteAllExpiredSince(Date now);
}

И Hibernate не будет загружать сущности в контекст настойчивости:

delete from
    VerificationToken
where
    expiryDate <= ?

3. Планирование задачи по очистке токенов

Теперь у нас есть запрос, который мы хотим выполнять периодически; Мы использовать поддержку планирования в весеннем и создать метод для запуска нашей логики удаления.

Если вы ищете более подробную информацию о структуре планирования весенних работ, посмотрите на эту статью.

3.1. Включить планирование

Для планирования задач мы создаем новый класс конфигурации ВеснаТаскКонфиг аннотировано @EnableScheduling :

@Configuration
@EnableScheduling
public class SpringTaskConfig {
    //
}

3.2. Очистка токенов

В уровне обслуживания мы называем наш репозиторий текущим временем.

Затем мы аннотировать метод с @Scheduled чтобы указать, что Spring должен выполнять его периодически:

@Service
@Transactional
public class TokensPurgeTask {

    @Autowired
    private VerificationTokenRepository tokenRepository;

    @Scheduled(cron = "${purge.cron.expression}")
    public void purgeExpired() {
        Date now = Date.from(Instant.now());
        tokenRepository.deleteAllExpiredSince(now);
    }
}

3.3. Расписание

Мы использовали свойство для удержания значения параметров crontab, чтобы избежать компенсации при изменениях. В application.properts мы присваиваем значение:

#    5am every day
purge.cron.expression=0 0 5 * * ?

4. Заключение

В этой статье мы решили удаление ПроверкаТокен s с использованием Весенние данные JPA .

Мы продемонстрировали создание запроса, используя выражение свойства, чтобы найти все токены, срок годности которых меньше указанного времени. И мы создали задачу, чтобы вызвать эту чистую логику во время выполнения – и зарегистрировали ее в структуре планирования весеннего задания, которая будет выполняться периодически.

Реализацию этого учебника по регистрации с помощью Spring Security можно найти в проект github – это проект на основе Eclipse, поэтому он должен быть легким для импорта и запуска, как она есть.