配置跨域后,框架帮我们做了什么?( 二 )

看一下用到的工具类
public abstract class CorsUtils {    // 请求中有 origin 这个header则返会true    public static boolean isCorsRequest(HttpServletRequest request) {        return (request.getHeader(HttpHeaders.ORIGIN) != null);    }    public static boolean isPreFlightRequest(HttpServletRequest request) {        return (isCorsRequest(request) && HttpMethod.OPTIONS.matches(request.getMethod()) &&                request.getHeader(HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD) != null);    }}利用CorsRegistry@Configurationpublic class GlobalCorsConfig {    @Bean    public WebMvcConfigurer corsConfigurer() {        return new WebMvcConfigurer() {            @Override            public void addCorsMappings(CorsRegistry registry) {                // 添加映射路径                registry.addMapping("/**")                        // 允许的域                        .allowedOrigins("*")                        // 允许携带cookie                        .allowCredentials(true)                        // 允许的请求方式                        .allowedMethods("GET","POST", "PUT", "DELETE")                        // 允许的请求头                        .allowedHeaders("*");            }        };    }}利用@CrossOrigin注解支持更细粒度的配置,可以用法方法上或者类上
@RestController@RequestMapping("resource")@CrossOrigin({"http://127.0.0.1:8080"})public class ResourceController其他方式支持跨域看到这你可能会产生疑问,我们的项目中没有跨域的配置啊,怎么还能支持跨域?那估计是把设置header这些活交给网关层来做了 。




推荐阅读