Вы можете создать конфигурацию java, как показано ниже:
@Configuration
public class SpringCloudConfig {
@Bean
public RouteLocator gatewayRoutes(RouteLocatorBuilder builder) {
return builder.routes()
.route(r -> r.path("/oauth/token")
.uri("http://localhost:8081/oauth/token")
.id("auth"))
.build();
}
}
В этом случае исходный запрос и ответ будут просто переданы через шлюз Spring Cloud.
Для Например, если Spring Cloud Gateway работает на порту 8080, запрос будет (сервер авторизации работает на порту 8081):
curl --location --request POST 'http://localhost:8080/oauth/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Basic c2VydmVyX2FwcDpzZWNyZXQ=' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'client_id=server_app'
Вы можете добавить идентификатор клиента, client-secret или другие данные на клиенте.
Если вам нужно изменить тело запроса, вы можете добавить фильтр:
@Configuration
public class SpringCloudConfig {
@Bean
public RouteLocator gatewayRoutes(RouteLocatorBuilder builder) {
return builder.routes()
.route(r -> r.path("/oauth/token")
.filters(f -> f.modifyRequestBody(String.class, String.class, MediaType.APPLICATION_JSON_VALUE,
(exchange, body) -> {
String modifiedBody = someService.modify(body);
return Mono.just(modifiedBody);
})
)
.uri("http://localhost:8081/oauth/token")
.id("auth"))
.build();
}
}