springboot对cros的校验
springboot
怎么配置跨域?
一、在接口/类上加一个注解@CrossOrign
1 | @CrossOrigin(origins = {"http://localhost:9000", "null"}) |
二、写一个配置类实现WebMvcCofigurerAdapter
1 | @Configuration |
三、原理刨析
Spring
中对CORS
规则的校验,都是通过委托给DefaultCorsProcessor
实现的。
DefaultCorsProcessor
处理过程如下:
- 1、首先判断是否为
cros
请求;如果Header中是否包含Origin
,如果有则是,否则不是; - 2、然后再判断
response
的Header
是否已经包含Access-Control-Allow-Origin
,如果包含,说明被处理过了,转下一步,否则之后不做处理; - 3、判断是否同源,如果是则转交给负责该请求的类处理;
- 4、不是同源,判断是否配置了
cros
规则,如果没有配置,且是预检请求,则拒绝该请求,不是预检请求则交给负责该请求的类处理;如果配置了则对该请求进行校验。
校验是根据
CorsConfiguration
这个类的配置进行判断
- 判断
origin
是否合法 - 判断
method
是否合法 - 判断
header
是否合法 - 如果全部合法,则在
response header
中添加响应的字段,并交给负责该请求的类处理,如果不合法,则拒绝该请求。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.