spring boot cloud Zuul Proxy - 代码中的硬编码代理路由引用

时间:2015-06-27 05:43:50

标签: spring-boot spring-cloud netflix-zuul

我有Spring Cloud的基础知识,使用网关(使用Zuul Proxy)代理休息端点(/ ui,/ admin作为单独的微服务)。我正在关注spring boot blog by Dave Syer

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

我们的想法是gateway(Zuul)将在8080上投放,而前端应用(UIAdmin)只会知道gateway并且不了解uiadmin后端结束网址。管理员应用只会联系“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”路由到管理员的所有HTML和JS代码中的所有href链接都是不可取的。我怎样才能克服这个问题(如何在管理代码中保留相对引用)?

1 个答案:

答案 0 :(得分:0)

抱歉,我还是不遵循这个流程。看起来这个角度代码是一个客户端&#34; admin / write.html&#34;应该通过zuul到http://localhost:8082/write.html?我不知道内部,但也许当你使用&#39; admin&#39;服务ID没有&#39;路径&#39;然后zuul没有条带化前缀?

尝试使用它:

zuul:
  routes:
    admin:
      path: /admin/**
      stripPrefix: true
      url: http://localhost:8082