Я хотел бы добавить задержку к некоторым запросам, не держась за поток под причалом. Я думаю, что это можно сделать с помощью асинхронной поддержки, добавленной в сервлет 3.
У меня внутри фильтра, который запускается первым, добавляется задержка:
AsyncContext asyncContext = request.startAsync();
asyncContext.setTimeout(1000L);
, который, кажется, задерживает запрос, но я не уверен, как возобновить цепочку фильтров. Я хотел бы возобновить цепочку фильтров по истечении времени ожидания.
Я пытался добавить слушателя:
asyncContext.addListener(new AsyncListener() {
@Override
public void onTimeout(AsyncEvent event) throws IOException {
try {
chain.doFilter(event.getAsyncContext().getRequest(), event.getAsyncContext().getResponse());
} catch (ServletException e) {
throw new RuntimeException(e);
}
}
Похоже, был назван следующий Фильтр в цепочке, но я не думаю, что весна была довольна этим. По некоторым запросам я не получил никаких ошибок, но для API входа в систему я всегда получал 401, но мой код, который проверяет аутентификацию, не вызывался. В других случаях я видел исключения нулевого указателя:
2019-06-28 13: 27: 08,772 [admin-78] [::] WARN advice.CatchAllException - Catching
java.lang.NullPointerException
at org.springframework.util.StringUtils.uriDecode(StringUtils.java:724)
at org.springframework.web.util.UriUtils.decode(UriUtils.java:342)
at org.springframework.web.util.UrlPathHelper.decodeInternal(UrlPathHelper.java:464)
at org.springframework.web.util.UrlPathHelper.decodeRequestString(UrlPathHelper.java:455)
at org.springframework.web.util.UrlPathHelper.getContextPath(UrlPathHelper.java:344)
at org.springframework.web.util.UrlPathHelper.getPathWithinApplication(UrlPathHelper.java:239)
at org.springframework.web.util.UrlPathHelper.getPathWithinServletMapping(UrlPathHelper.java:192)
at org.springframework.web.util.UrlPathHelper.getLookupPathForRequest(UrlPathHelper.java:169)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:365)
Как я могу продолжить работу с цепочкой фильтров?