【发布时间】:2019-04-19 04:22:30
【问题描述】:
在我发现(也尝试搜索文档)关于 Spring/BOOT 与 Angular(通常是 gradle)的每个集成教程中,都在讨论如何编译 Angular 以用于生产以及如何在开发中使用它。
我认为我发现的所有内容都表明您在一个端口(默认 8080)上运行服务器(Spring BOOT)并在第二个端口(默认 4200)上运行客户端(Angular)作为开发“ng serve”。
所以基本上在开发中,这意味着您有 2 个独立的服务器,它们甚至不需要相互了解。在所有教程中,Angular 都使用 Spring 作为 REST JPA 存储库(与上一句一致)。
我的问题是 - 我希望让它们在开发中一起工作的任何地方都使用了一个技巧,看起来有点像这样:
@CrossOrigin(origins = "http://localhost:4200", maxAge = 3600)
@RestController
@RequestMapping({"/api"})
public class SomeController
所以为了让 Spring 允许 Angular 4200 服务器实际工作,我们将 CrossOrigin 设置为该端口。虽然在开发中它绝对没问题,但是当我们打包 Angular 客户端进行生产时,不需要该注释 - Spring 不应该负责从其端口(8080)提供内容吗?不再有两台服务器,只有一台。
最后我的问题是:
这里的正确方法是什么?我真的需要@CrossOrigin 政策才能让它在开发中工作吗?如果是这样,我可以在生产中删除它吗? Spring 是否有一些巧妙的技巧将其标记为“devOnly”?
【问题讨论】:
-
看看这里:stackoverflow.com/a/48729208/1235935。如果你的服务器和 Angular 开发服务器都运行在 localhost,你不需要任何跨源的东西
标签: java spring angular spring-boot