Spring Boot Cloud Zuul Proxy - жестко запрограммированные ссылки на прокси-маршруты в коде

У меня есть основы Spring Cloud, работающего со шлюзом (с Zuul Proxy), проксирующим конечные точки отдыха (/ ui, / admin как отдельные микросервисы). Я подписываюсь на весенний блог Дэйва Сайера

zuul:
  routes:
    ui:
      url: http://localhost:8081
    admin:
      url: http://localhost:8082
    resource:
      url: http://localhost:9000

Идея состоит в том, что gateway (Zuul) будет работать на 8080, а интерфейсные приложения (UI и Admin) будут знать только gateway и не будут знать URL-адреса ui и admin серверной части. Приложение администратора просто свяжется с `http://localhost:8080/admin '

Настройка работает нормально, за исключением того, что интерфейсные приложения (например, admin) должны будут жестко закодировать маршрут /admin в качестве префикса во всем коде JS и HTML. 2 примера ниже:

Следующее не работает (в admin.js).

angular.module('admin', []).controller('home',
function($scope, $http) {

    var computeDefaultTemplate = function(user) {
        $scope.template = user && user.roles &&
        user.roles.indexOf("ROLE_WRITER")>0 ? "write.html" : "read.html";       
    }

Однако следующее действительно работает:

angular.module('admin', []).controller('home',

function($scope, $http) {

    var computeDefaultTemplate = function(user) {
        $scope.template = user && user.roles && 
        user.roles.indexOf("ROLE_WRITER")>0 ? "admin/write.html" : "admin/read.html";       
    // ..... !! NOTE the hardcoding of 'admin/' prefix route !!!

    }

Подобные проблемы существуют в приложении администратора: index.html

Работает (но не желательно):

<body ng-app="admin" ng-cloak class="ng-cloak" ng-controller="home">
    ...
    ..... !! NOTE the hardcoding of 'admin/' prefix route !!!
    <script src="admin/js/admin.js" type="text/javascript"></script>
    ....
</body>
</html>

Не работает:

<body ng-app="admin" ng-cloak class="ng-cloak" ng-controller="home">
    ...
    <script src="js/admin.js" type="text/javascript"></script>
    ....
</body>
</html>

Очевидно, это жесткое кодирование маршрута «/ admin» во все ссылки href во всем коде HTML и JS в админке нежелательно. Как я могу это преодолеть (как сохранить относительные ссылки в моем коде администратора)?


person mpprdev    schedule 27.06.2015    source источник
comment
так это угловой код на localhost: 8082 в службе администратора?   -  person freakman    schedule 27.06.2015
comment
да. Я отредактирую вопрос с этой запиской   -  person mpprdev    schedule 28.06.2015
comment
Если вы используете маршрутизатор zuul, вам необходимо знать контекст. Я не вижу возможности использовать / admin в вашем js. Почему это нежелательно?   -  person spencergibb    schedule 08.07.2015
comment
Вы когда-нибудь находили для этого подходящее решение? У меня аналогичная проблема, когда я бы хотел, чтобы zuul удалил префикс (например, / myapp / api / v1 / **), поэтому мне не нужно жестко кодировать этот путь в моей службе пользовательского интерфейса (т.е. не префикс всех css / js и submit / actions)   -  person Rob    schedule 13.10.2015


Ответы (1)


извините, я все еще не слежу за этим потоком. Похоже, этот код angular является клиентом, и "admin / write.html" должен пройти через zuul на http://localhost:8082/write.html? Я не знаю внутреннего устройства, но, может быть, когда вы используете идентификатор службы admin без пути, тогда zuul не чередует префикс?

Попробуйте с этим:

zuul:
  routes:
    admin:
      path: /admin/**
      stripPrefix: true
      url: http://localhost:8082
person freakman    schedule 28.06.2015