我创建了一个带有 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/