即使在使用 @CrossOrigin(origins="*") 注释控制器后,跨域请求也会被阻止?
Posted
技术标签:
【中文标题】即使在使用 @CrossOrigin(origins="*") 注释控制器后,跨域请求也会被阻止?【英文标题】:Cross Origin request gets blocked even after annotating the controller with @CrossOrigin(origins="*")? 【发布时间】:2020-05-06 08:16:12 【问题描述】:我有一个 SpringBoot 控制器如下
@CrossOrigin(origins="*")
public class FormController
@PostMapping(path="/basicForm")
public String postResponseController(
@RequestBody FormDomain loginForm)
System.err.println("basic form method called");
return "file transfer completed successfully";
我已使用 @CrossOrigin(origins="*")
注释控制器以启用 CORS。
这是我的 FormDomain 类
public class FormDomain
private MultipartFile fileInput;
public MultipartFile getFileInput()
return fileInput;
public void setFileInput(MultipartFile fileInput)
this.fileInput = fileInput;
还有调用控制器方法的角脚本
onClickSubmit(data)
this.http.post("http://localhost:8080/basicForm", data).subscribe( (ob)=>(console.log(ob)));
尽管我已注释控制器以启用 CORS,但我在浏览器控制台中收到以下错误
Access to XMLHttpRequest at 'http://localhost:8080/basicForm' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
如何解决这个问题?
【问题讨论】:
在FormController
中添加@RestController
在浏览器中使用开发者工具,检查是否发送了标头
【参考方案1】:
你必须在FormController
中添加@RestController
@Controller
是@Component
类的特化,允许通过类路径扫描自动检测实现类。而@RestController
是@Controller
的特化,它消除了对@ResponseBody
的需求。可以参考@Controller, RestController
【讨论】:
以上是关于即使在使用 @CrossOrigin(origins="*") 注释控制器后,跨域请求也会被阻止?的主要内容,如果未能解决你的问题,请参考以下文章
我已经允许 @CrossOrigin(origins="*") 注释,但它仍然不起作用。谁能告诉我这里有啥问题?
HTML5 script 标签的 crossorigin 属性到底有啥用
link标签中的integrity和crossorigin字段
Spring Boot:即使使用@CrossOrigin,CORS 策略也阻止了从源 FRONTEND 访问 BACK_END' 处的 XMLHttpRequest