一尘不染

Spring Cloud:默认从网关重定向到UI

spring-boot

我是微服务和Spring Boot的新手。我有一些Spring Cloud微服务,其Zuul网关运行在端口8080上。

   浏览器
      |
      |
    网关(:8080)
     / \
    / \
   / \
资源用户界面(:8090)

端口8090上有一个UI微服务,该微服务具有一个内部带有方法的控制器,返回index.html。

我为UI配置了这样的Zuul路由(我也在使用Eureka):

zuul:
  routes:
    ui:
      path: /ui/**
      serviceId: myproject.service.ui
      stripPrefix: false
      sensitiveHeaders:

如果我打电话,http://localhost:8080/ui/一切正常,我可以看到我的index.html的呈现。

是否可以通过某种方式配置Spring
Cloud以使以下流程正常工作:调用http://localhost:8080/将我们重定向到UI微服务的控制器,该控制器返回index.html?

因此,想法是从网站的根目录打开UI。

提前致谢!


阅读 620

收藏
2020-05-30

共1个答案

一尘不染

最后,我使代码工作了!感谢@pan提到根路径上的Zuul路由问题,以及@RzvRazvan揭示了Zuul路由的工作方式。

我刚刚将 控制器添加到具有一个端点的Zuul路由网关微服务,以从根重定向http://localhost:8080/http://localhost:8080/ui/

@Controller
public class GateController {    
    @GetMapping(value = "/")
    public String redirect() {
        return "forward:/ui/";
    }    
}

Zuul 从重定向特性 网关的microService 端口 8080 作为http://localhost:8080/ui/
UI微服务 ,其实现端口隔离的弹簧启动应用程序 8090http://localhost:8090/ui/

zuul:
  routes:
    ui:
      path: /ui/**
      serviceId: myproject.service.ui
      stripPrefix: false
      sensitiveHeaders:

UI微服务的属性:

server:
  port: 8090
  servlet:
     contextPath: /ui

最终,此调用http://localhost:8080/将我们重定向到UI微服务的控制器,该控制器返回view index.html

@Controller
public class UiController {
    @GetMapping(value = "/")
    public String index() {
        return "index.html";
    }
}

实际上,在这样的体系结构中呈现静态内容时,我还有另一个问题,但它与我使用Vue.js框架开发的前端配置有关。如果可能对某人有帮助,我将在这里用几句话进行描述。

我具有UI微服务的以下文件夹结构:

myproject.service.ui
    └───src/main/resources
        └───public
            |───static
            |    ├───css
            |    └───js
            └───index.html

public文件夹的所有内容都是由npm run build任务从 webpackvue.js
生成的。第一次,我打电话给http://localhost:8080/200 OKindex.html404
的所有其他静态资源,因为他们被称为是这样的:

http:\\localhost:8080\static\js\some.js

因此,它为webpack中的静态资产配置了错误的公共路径。我在中更改了它config\index.js

module.exports = {
  ...
  build: {
    ...
    assetsPublicPath: '/ui/',
    ...
  }
...
}

静态资产也因此得到适当的称呼。例如:

http:\\localhost:8080\ui\static\js\some.js
2020-05-30