【发布时间】:2021-12-10 03:14:48
【问题描述】:
从源“http://localhost:4200”访问“http://localhost:8080/employee/add”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。
我正在关注 youtube 教程并尝试创建员工管理器应用程序。我正在使用带有 Angular 的 Spring。我在获取所有员工时遇到了 CORS 问题,我在 Main 类中编写了以下代码来克服这个问题。我从我关注的同一个 Youtube 频道获得了此代码。
@Bean
public CorsFilter corsFilter(){
CorsConfiguration corsConfiguration= new CorsConfiguration();
corsConfiguration.setAllowCredentials(true);
corsConfiguration.setAllowedOrigins(Arrays.asList("http://localhost:4200" ));
corsConfiguration.setAllowedHeaders(Arrays.asList("Origin","Access-Control-Allow-Origin","Content-type","Accept","Authorization",
"Access-Control-Allow-Origin: *","Access-Control-Allow-Methods: GET, DELETE, HEAD, OPTIONS","Origin", "Accept","X-Reuested-With","Access-Control-Request-Method", "Access-Control-Request-Headers"));
corsConfiguration.setExposedHeaders(Arrays.asList("Origin","Content-type","Accept","Authorization",
"Access-Control-Allow-Origin","Access-Control-Allow-Credentials"));
UrlBasedCorsConfigurationSource urlBasedCosConfigurationSource = new UrlBasedCorsConfigurationSource();
urlBasedCosConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
return new CorsFilter((CorsConfigurationSource) urlBasedCosConfigurationSource);
}
使用上面的代码,所有员工的获取都正确发生了。但是当我尝试添加一个新员工时,它给出了上述错误。
addEmployee服务的代码sn-ps:
点击按钮后调用此函数
add-employee-component.ts
onAddEmployee(addForm : NgForm) : void{
this.employeeService.addEmployee(addForm.value).subscribe(
(response: Employee) => {
console.log(response);
},
(error:HttpErrorResponse) => {
alert(error.message);
}
)
}
employee.service.ts
public addEmployee(employee : Employee) : Observable<Employee>{
console.log(`${this.apiServerUrl}/employee/add`);
return this.http.post<Employee>(`${this.apiServerUrl}/employee/add`,employee);
}
新增员工春季服务
@PostMapping("/add")
public ResponseEntity<Employee> addNewEmployee(@RequestBody Employee employee){
Employee newEmployee = empService.addEmployee(employee);
return new ResponseEntity<>(newEmployee,HttpStatus.OK);
}
是否需要向 CORS 配置添加更多内容?我在其他地方犯错了吗?
我对 Spring 和 Angular 都非常陌生。
【问题讨论】: