SpringBoot API возвращает 200 перед обработкой - PullRequest
1 голос
/ 06 марта 2019

У меня есть API, который я не хочу, чтобы люди могли отслеживать, сколько времени занимает запрос xhr к API в зависимости от того, действителен ли аккаунт или нет.

Проблема заключается в том, что, если они хотят собирать идентификаторы пользователей, они могут спамить API снова и снова и заметили бы, что реальным идентификаторам требуется гораздо больше времени для возврата ответа. Ответ 200 каждый раз, и страница ничего не делает с ответом.

Есть ли простой способ заставить приложение Java SpringBoot немедленно вернуть 200 и затем выполнить обработку?

Ответы [ 3 ]

4 голосов
/ 06 марта 2019

Да, вы можете сделать это асинхронно.Вам просто нужно аннотировать ваш @Controller метод с помощью @Async.Это заставит метод выполняться асинхронно, поэтому соединение не будет заблокировано.Возврат прокси Future, дополнительную информацию можно найти в документах .

1 голос
/ 07 марта 2019

Пока @async придет вам на помощь в таком состоянии. Это все еще может быть обработано очень аккуратно

  1. Попробуйте перехватить запрос в перехватчике / фильтре, который просто проверит действительность учетной записи, и отклонит соответствующие запросы, не доходя до контроллера.
  2. На контроллере вызовите асинхронный метод обслуживания, не забудьте указать размер пула основных потоков, максимальный размер пула потоков, атрибут длины очереди, в противном случае количество порождаемых потоков может поглотить все ресурсы виртуальной машины.
  3. Не используйте аннотацию @async для вложенного транзакционного метода хранилища, так как @async с @transactional портит транзакции.

Ура!

1 голос
/ 07 марта 2019

@Async - это самый простой способ.

Добавьте @EnableAsync аннотацию в ваш основной класс (т. Е. Основной класс с @SpringBootApplication аннотацией)

Добавьте @Async в ваш метод, который выхотел выполнить в отдельном потоке.

Некоторое ограничение @Async

  • это должно быть применено только к открытым методам самовывозом - вызов
  • асинхронный метод из того же класса - не будет работать
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...