java - 部署 Spring Boot + Angular 应用程序时出现的问题

标签 java angular spring-boot tomcat web-applications

我创建了一个带有 Spring Boot 后端的 Angular 应用程序,目前我通过在 Intellij 上运行服务器和带有“ng serve”的 Angular 应用程序在本地工作, 我想将我的应用程序部署到 Heroku。

我在互联网上搜索,我看到要做到这一点的第一步是构建 Angular 应用程序并将“dist”内容复制到“src/main/resources/static”。

我复制了内容,然后尝试运行服务器(仍在本地工作)并从浏览器访问该地址的应用程序:“http://localhost:3000/”(我将 3000 定义为 Spring Boot 应用程序端口)。

不幸的是,我没有看到我的 Angular 应用程序,我看到的是“Whitelabel 错误页面”

This application has no explicit mapping for /error, so you are seeing this as a fallback.
Sat Nov 09 17:26:21 IST 2019
There was an unexpected error (type=Forbidden, status=403).
Access Denied

我假设我收到“访问被拒绝”错误,因为我的 API 上有一个“JWTAuthorizationFilter”- API 的使用者必须在请求 header 中提供有效的 JSON Web token 。

我的问题是:我应该怎么做才能使“http://localhost:3000/”返回 Angular 应用程序而不访问 API,我在这里缺少什么?

我的应用程序有两个 Controller (@RestController),它们有几个 GET\POST\DELETE\PUT 请求。

我还配置了 JWTAuthenticationFilter 和 JWTAuthorizationFilter。

我还是不明白在Java spring项目部署中如何表达angular应用和Spring Rest API的分离。

你能帮我解决这个问题,或者指导我在哪里可以找到关于这个的解释吗?

最佳答案

您要做的是从 spring boot tomcat 嵌入式 servlet 容器提供 Angular 应用程序,因此安全配置会影响静态 Angular 文件所在的端点。

要解决您的问题,在您的安全配置类(扩展 WebSecurityConfigurerAdapter 的类)中,您只能限制您的实际 api 端点,例如:

http.authorizeRequests().antMatchers( "/api/**").authenticated();

关于java - 部署 Spring Boot + Angular 应用程序时出现的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58781176/

相关文章:

java - 使用 JWT token 安全性的 Spring Boot 单元测试

Java EE : With CDI in place, 我们是否需要将 'new' 用于我们自己的 POJO

unit-testing - 模拟 router.events.subscribe() Angular2

java - Spring Boot微服务已注册到Eureka但无法命中

angular - 在 Angular 模板中访问联合类型的属性

Angular 2,Http 和不设置内容类型 "application/json"

java - Spring Data JPA 查询、过滤?搜索引擎 ? JPQL?

java - java.util.List 的降序迭代器

java - 为什么我们要在 Java 中以 Object 作为参数编写 equals 方法?

java - 如果扫描仪读取特定输入则中断