Мне нужно, чтобы некоторые HTTP-запросы были перенаправлены на веб-приложение/службу загрузки Spring Boot, а приложение-запрос Spring ничего не делает и действует как пересылка между HTTP-клиентом ( другая услуга) и запрос истинного адресата. Но когда ответ возвращается в приложение Spring (от этого адресата), мне нужно приложение Spring, чтобы иметь возможность проверить ответ и, возможно, предпринять какие-либо действия по нему. Итак:
- HTTP-клиент делает запрос, например, http://someapi.example.com
- Магия сети направляет запрос в мое приложение Spring, например, http://myproxy.example.com
- В запросе это приложение/прокси ничего не делает, поэтому запрос перенаправляется на http://someapi.example.com
- Конечная точка службы в http://someapi.example.com возвращает ответ HTTP на прокси-сервер
- Прокси-сервер в http://myproxy.example.com проверяет этот ответ и, возможно, отправляет предупреждение перед возвратом ответа исходному клиенту
Итак, по существу, фильтр, который действует как сквозной запрос, и только действительно делает что-либо после выполнения удаленной службы и возвращает ответ.
Моя лучшая попытка до сих пор заключалась в настройке фильтра сервлета:
@Override
void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
chain.doFilter(request, response)
// How and where do I put my code?
if(responseContainsFizz(response)) {
// Send an alert (don't worry about this code)
}
}
Можно ли это сделать? Если да, где я могу поместить код, который проверяет и реагирует на ответ? С моим кодом, как это происходит, я получаю исключения, возникающие при попытке нажать контроллер из браузера:
java.lang.IllegalStateException: STREAM
at org.eclipse.jetty.server.Response.getWriter(Response.java:910) ~[jetty-server-9.2.16.v20160414.jar:9.2.16.v20160414]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_92]
rest of stack trace omitted for brevity
Любые идеи?