CorsRegistry SpringBoot的解决跨域方式介绍 您所在的位置:网站首页 重复提交无效什么意思呀 CorsRegistry SpringBoot的解决跨域方式介绍

CorsRegistry SpringBoot的解决跨域方式介绍

2024-07-12 22:12| 来源: 网络整理| 查看: 265

1:CorsRegistry是什么?

CorsRegistry的全称为Cross-Origin Resource Sharing  Registry ,直译过来就是跨域资源共享登记。是spring中解决跨域的一种方式

需要在pom文件中引入jar包.  

org.springframework.boot spring-boot-starter-web

跨域还有其他方式来解决,比如前端的jsonp以及java后端的HttpServletResponse.setHeader.也都可以解决跨域,

我以前的博客有介绍  https://blog.csdn.net/wang5701071/article/details/108622112  本文只介绍CorsRegistry

 

2:CorsRegistry配置的方式       1: 配置CorsConfig类

需要在配置类中引入@Configuration注解,SpringBoot才能识别到该配置文件,这个就涉及到boot的自动装配原理了,

然后实现 WebMvcConfigurer接口中的 addCorsMappings 方法

import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebMVCConfiguration implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { // 允许跨域访问资源定义: /** 所有资源 registry.addMapping("/**") .allowedOrigins("*") // 允许发送Cookie .allowCredentials(true) // 允许 GET", POST, PUT, DELETE 方法 .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS"); } }      2:@CrossOrigin 注解  通过注解的方式来完成验证

 @CrossOrigin(origins = ["http://localhost:8080"]) ,该注解可以作用于方法或者类,可以针对这个方法或类对应的一个或多个 API 配置 CORS 规则:

@RestController class CorsController { @GetMapping("/test") @CrossOrigin(origins = {"http://localhost:8080"}) public String Test() { return "Hello, CORS!"; } }

此时跨域问题就解决了.

 

3:原理解析 Spring 中对 CORS 规则的校验,都是通过委托给 DefaultCorsProcessor实现的。 DefaultCorsProcessor 处理过程如下: 判断依据是 Header中是否包含 Origin。如果包含则说明为 CORS请求,转到CorsConfig 配置类中;否则,说明不是 CORS 请求,不作任何处理。 判断 response 的 Header 是否已经包含 Access-Control-Allow-Origin,如果包含,证明已经被处理过了, 转到 Controller中,否则不再处理。 判断是否同源,如果是则转交给负责该请求的类处理 是否配置了 CORS 规则,如果没有配置,且是预检请求,则拒绝该请求,如果没有配置,且不是预检请求,则交给负责该请求的类处理。如果配置了,则对该请求进行校验。 校验就是根据 CorsConfiguration 这个类的配置进行判断: 判断 origin 是否合法 判断 method 是否合法 判断 header是否合法 如果全部合法,则在 response header中添加响应的字段,并交给负责该请求的类处理,如果不合法,则拒绝该请求。

参考文章: https://segmentfault.com/a/1190000019485883?utm_source=tag-newest



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有