Spring Boot CORS 教程显示了如何在 Spring Boot 应用中设置跨域资源共享。
CORS
跨域资源共享(CORS)是一种安全策略,它使用 HTTP 标头来告诉浏览器,让运行在一个来源(域)上的 Web 应用有权访问来自另一个来源的服务器中的选定资源。
网页可以嵌入跨域图像,样式表,脚本,iframe 和视频。 默认情况下,同源安全策略禁止某些跨域请求,尤其是 Ajax 请求。
XMLHttpRequest 和 Fetch API 遵循同源策略。 因此; 使用这些 API 的 Web 应用只能从加载应用的相同来源请求 HTTP 资源,除非来自其他来源的响应包括正确的 CORS 标头。
Spring Boot CORS 示例
以下 Spring Boot 应用将 Angular 用作前端。 Angular SPA 在localhost:4200
上运行,并向在localhost:8080
上运行的 Spring Boot 后端发出请求。 为此,我们需要在 Spring Boot 应用中启用 CORS。
Spring Boot 后端
后端将在 Spring Boot 中创建。
这是项目结构。
pom.xml
这是 Maven 构建文件。
resources/application.properties
application.properties
是主要的 Spring Boot 配置文件。 使用spring.main.banner-mode
属性,我们可以关闭 Spring 标语。
com/zetcode/model/City.java
这是City
实体。 它包含以下属性:id
,name
和population
。
com/zetcode/repository/CityRepository.java
CityRepository
从JpaRepository
延伸。 它提供了实体的类型及其主键。
com/zetcode/controller/MyController.java
在MyController
中,我们有一个返回所有城市的端点。
Note: In Java enterprise applications it is a good practice to define a service layer that works with repositories. For simplicity reasons, we skip the service layer.
com/zetcode/conf/AppConf.java
使用CorsRegistry
,我们启用 CORS。 我们设置允许的来源和请求方法。
com/zetcode/MyRunner.java
在MyRunner
中,我们将数据添加到内存 H2 数据库中。
resources/static/index.html
在主页中,我们使用 Fetch API 创建一个获取所有城市的请求。 该请求来自同一来源,因此此处不需要 CORS。
com/zetcode/Application.java
Application
设置 Spring Boot 应用。
Angular 前端
应用的前端是使用 Angular 创建的。
我们创建一个新的 Angular 应用。
src/app/app.module.ts
在app.module.ts
中,我们启用了 http 模块,该模块用于发出请求。
src/app/app.component.ts
在ngOnInit()
方法中,我们向后端创建一个 GET 请求。 数据存储在httpdata
中。
src/app/app.component.html
我们使用*ngFor
指令在 HTML 列表中显示数据。
我们启动 Angular 服务器。
我们运行后端服务器。 现在我们找到localhost:4200
。 加载页面后,会将请求发送到 Spring Boot 应用以获取城市列表。
在本教程中,我们为具有 Angular 前端的 Spring Boot 应用启用了 CORS 支持。 由于这两个部分在不同的域上运行,因此需要 CORS。