Должна ли Spring-boot иметь возможность использовать прокси с помощью глобальных аргументов JVM?
В целях тестирования я хочу изменить ответ между двумя приложениями с помощью ZAP Proxy.
В веб-приложении я настроил Java-процесс с глобальными аргументами JVM для использования прокси:
java -Dhttps.proxyHost=10.1.93.90 \
-Dhttps.proxyPort=3128 \
-Dhttp.proxyHost=10.1.93.90 \
-Dhttp.proxyPort=3128 \
-jar myapplication.jar
Но прокси не используется. Только один запрос проходит через прокси-сервер при запуске приложения к провайдеру openID для получения /auth/realms/master/.well-known/openid-configuration
Я знаю, как настроить прокси-сервер для JVM, и он работает для приложений без весенней загрузки.
Я читаю разные статьи, например так # 33951240 или spring-boot issue # 3968 и т.д ... НО в этом случае я не могу добавить дополнительный код, так как я должны использовать его как есть, поэтому spring devtools не является вариантом или советом по добавлению кода. Я мог бы попросить свою команду разработчиков добавить что-нибудь, но только в качестве последнего варианта.
Фрагмент кода, в котором запрос направляется в серверное приложение:
import org.springframework.cloud.gateway.support.ServerWebExchangeUtils;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.security.oauth2.core.OAuth2AuthorizationException;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilter;
import org.springframework.web.server.WebFilterChain;
import reactor.core.publisher.Mono;
[.....]
protected Mono<ServerWebExchange> prepareExchange(ServerWebExchange exchange, ServerHttpRequest request) {
return Mono.just(exchange.mutate().request(request).build());
}
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
return ServerWebExchangeUtils.cacheRequestBody(exchange, request -> {
return prepareExchange(exchange, request) //
.flatMap(mappedExchange -> chain.filter(mappedExchange).thenReturn(mappedExchange)) //
.flatMap(mappedExchange -> setRedirect(mappedExchange).thenReturn(mappedExchange)) //
.then()
.onErrorResume(OAuth2AuthorizationException.class, e -> setRedirectAfterError(exchange));//
});
}
[......]
- РЕДАКТИРОВАТЬ после отзывов моей команды разработчиков. Важная информация заключается в том, что это приложение действует как шлюз между интерфейсом (браузером) и сервером. Application.yml содержит настройки шлюза для маршрутизации трафика в соответствии с spring-cloud- шлюз
Согласно проблеме Spring-Cloud-Gateway № 176, это возможно с 2.0.0.M8.
Мы используем spring-boot 2.2.4 с spring-cloud-gateway 2.2.1 и Reaction-netty 0.9.4
Значит, я смогу использовать эту настройку?
spring.cloud.gateway.httpclient.proxy.host=10.1.93.90
spring.cloud.gateway.httpclient.proxy.port=3128
Но с такими настройками конфигурация маршрута в шлюзе полностью игнорируется, и интерфейс (браузер) пытается напрямую подключиться к бэкэнду. Странный!