部署 Spring Boot + Angular 应用程序时出现问题
Posted
技术标签:
【中文标题】部署 Spring Boot + Angular 应用程序时出现问题【英文标题】:A Problem while deploying Spring Boot + Angular application 【发布时间】:2020-03-05 22:46:45 【问题描述】:我创建了一个带有 Spring Boot 后端的 Angular 应用程序,目前我通过在 Intellij 上运行服务器和带有“ng serve”的 Angular 应用程序在本地工作, 我想将我的应用部署到 Heroku。
我在互联网上进行了搜索,发现第一步是构建 Angular 应用并将“dist”内容复制到“src/main/resources/static”。
我复制了内容,然后尝试运行服务器(仍在本地运行)并从浏览器访问该地址的应用程序:“http://localhost:3000/”(我将 3000 定义为 Spring Boot 应用程序端口)。
很遗憾,我没有看到我的 Angular 应用程序,我看到的是“Whitelabel Error Page”
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 的使用者必须在请求标头中提供有效的 JSON Web 令牌。
我的问题是:我应该怎么做才能导致“http://localhost:3000/”返回 Angular 应用程序而不访问 API,我在这里缺少什么?
我的应用有两个控制器 (@RestController),它们有几个 GET\POST\DELETE\PUT 请求。
我配置了一个 JWTAuthenticationFilter 和 JWTAuthorizationFilter。
我还是不明白 Angular 应用和 Spring Rest API 的分离在 Java spring 项目部署中是如何表达的。
你能帮我解决这个问题吗,或者指导我在哪里可以找到关于这个问题的解释?
【问题讨论】:
【参考方案1】:您要做的是从 Spring Boot Tomcat 嵌入式 servlet 容器中为 Angular App 提供服务,因此安全配置会影响静态 Angular 文件所在的端点。
为了解决您的问题,在您的安全配置类(扩展 WebSecurityConfigurerAdapter 的类)中,您只能限制您的实际 api 端点,例如:
http.authorizeRequests().antMatchers( "/api/**").authenticated();
【讨论】:
以上是关于部署 Spring Boot + Angular 应用程序时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
Angular、mySQL 和 Spring Boot 的部署?
部署 Spring Boot + Angular 应用程序时出现问题
将 Spring Boot - Angular 应用程序部署到 digitalocean
如何将 Spring Boot 和 Angular 应用程序部署为单个 war 文件?
如何将带有 angular 2 前端(angular-cli build)的 spring-boot webapp 部署到 Tomcat?