Можно ли настроить Spring Cloud Gateway с правилом перезаписи для режима истории маршрутизатора Vue? - PullRequest
0 голосов
/ 07 августа 2020

Я использую Spring Cloud Gateway в качестве API-шлюза, а также в качестве веб-сервера, на котором размещены файлы c (html / js / css) Vue. js SPA.

Заявитель : Я не могу изменить эту (плохую) архитектуру из-за организационных ограничений.

В настоящее время я использую по умолчанию Vue Маршрутизатор ha sh, что означает, что маршрутизация на стороне клиента приложения Vue выполняется через URL-адрес ha sh, например

http://hostname/#/route?parameter1=true

. Поскольку Spring Cloud Gateway также действует как шлюз аутентификации, он перенаправляет на сервер SSO OAuth2 / OpenID, и при этом информация о маршруте URL ha sh удаляется после перенаправления.

Я пытаюсь изменить это поведение, переключившись на Vue Маршрутизатор история режим , который включал бы такие URL-адреса, как

http://hostname/route?parameter1=true

, и, следовательно, информация о маршрутизации «выживала» при перенаправлении SSO.

Чтобы сделать что, Vue документация маршрутизатора включает несколько примеров для дополнительных Конфигурация веб-сервера (например, mod_rewrite для Apache et c.) .

К сожалению, для моего особого случая нет примера; -)

Я просмотрел документацию Spring Cloud Gateway , но не нашел соответствия для этого случая.

Вкратце:

Можно ли настроить Spring Cloud Gateway для соответствия Vue Требования к режиму истории маршрутизатора?

1 Ответ

1 голос
/ 07 августа 2020

Вы могли исправить это со стороны Spring Boot. Я имею в виду, что вы могли:

  1. Включить Vue режим истории маршрутизатора, как описано в документации здесь
  2. Создать контроллер пересылки Spring Boot следующим образом:
        @RequestMapping(value = "{_:^(?!index\\.html|api).$}")
        public String redirectApi() {
            LOG.info("URL entered directly into the Browser, so we need to redirect...");
            return "forward:/";
        }

Он в основном перенаправляет все маршруты во внешний интерфейс, кроме: /, /index.html, /api, /api/**.

Здесь вы можете найти более подробный пример.

...