spring - 将 ReactJS 与 Spring Boot 集成的正确方法是什么?
问题描述
我正在尝试为前端设置一个带有 ReactJS 的 Spring Boot Rest API。在以下情况下实现此目的的正确方法是什么?
作为一名多年的 Java 后端开发人员,我在前端使用过 JSF 和相关的组件库。现在我正在努力想象 ReactJS 和 Spring Boot 的集成。我在后端有许多 RESTful Spring Boot 微服务,它们位于代理后面(确切地说是 Zuul 和 SSO 和 OAuth2 - JWT 保护)。我的前端应用程序将由两部分组成。登陆页面和管理面板(仪表板)。为此设置集成 ReactJS 和 Spring Boot 的正确方法是什么?我见过两种方法。一种方法是将两个应用程序捆绑在一起并使用 Maven 构建它们,使它们在 websocket 上进行通信,另一种方法是完全分离两个应用程序。
我遇到的基于 Maven 的方法:
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>1.6</version>
<configuration>
<installDirectory>target</installDirectory>
</configuration>
<executions>
<execution>
<id>install node and npm</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<configuration>
<nodeVersion>v10.11.0</nodeVersion>
<npmVersion>6.4.1</npmVersion>
</configuration>
</execution>
<execution>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>install</arguments>
</configuration>
</execution>
<execution>
<id>webpack build</id>
<goals>
<goal>webpack</goal>
</goals>
</execution>
</executions>
</plugin>
通过遵循上述方法,我是否应该期望我的应用程序通过安全性具有更多功能,或者仅使用令牌/api 密钥调用 api 就可以了,因为我最近已经尝试过了。
解决方案
虽然 frontend-maven-plugin 插件对于通过 maven 构建前端应用程序非常有帮助,但我会将前端与您的 java 应用程序完全隔离。前端应用程序有自己的构建配置和工具,强制使用 maven 构建前端应用程序有点麻烦恕我直言。
关于安全性,我想说两种实现之间没有太大区别,因为在这两种情况下,后端都以 403 响应,而前端必须处理它。但是,在您的第一个选项中,您的 java 应用程序可能可以控制最初是否允许访问静态文件。如果您不想事先将静态文件发送给未经身份验证的用户,则更高级别的访问管理工具(例如Keycloak)可能会有所帮助。
推荐阅读
- angular - 将参数传递给 Angular CLI
- amazon-web-services - AWS API Gateway API 密钥与 Cors
- r - 在 R 数据框中按组计算值
- sql - SQL:查询过滤MemberId,如果住宿不连续(同一家酒店,入住和退房发生在同一天)
- javascript - 在 Google Maps API 中清除地图上的所有矩形
- python - Mako:在上下文中使用预定义/默认项目进行渲染?
- r - 解决旅行商的错误“较长的对象长度不是较短的对象长度的倍数”
- excel - 是否可以使用来自 excel 的数据来使用来自网络的拉取信息?
- java - Android 应用程序在显示 ProgressBar 时出现问题
- java - java中的暂停和恢复线程不起作用