您现在的位置是:首页 > 编程语言学习 > 前端编程语言 > 文章正文 前端编程语言

SpringBoot实现全局和局部跨域的两种方式

2023-01-09 09:24:07 前端编程语言

简介在如今前后端分离的开发模式下,跨域是一个非常经典的问题,解决的方式也有很多,比如代理服务器,使用JSONP我之前也写过一篇解决跨域问题...

在如今前后端分离的开发模式下,跨域是一个非常经典的问题,解决的方式也有很多,比如代理服务器,使用JSONP

我之前也写过一篇解决跨域问题的文章,感兴趣的可以参考:解决Vue前后端跨域问题的多种方式

上面两种解决跨域的办法都是在前端角度的,这次站在后端角度,从全局和局部两个方面解决跨域问题

什么是跨域

所谓的跨域请求就是指:当前发起请求的域与该请求指向的资源所在的域不一样。这里的域指的是这样的一个概念:我们认为若协议 + 域名 + 端口号均相同,那么就是同域。

解决跨域

后端解决跨域,主要借助cors

局部解决(使用注解)

可以使用注解:@CrossOrigin

该注解开启之后,就可以解决跨域问题,它可以加在controller中,表面这个controller中的全部方法都经过跨域处理,也可以单独加在某个方法上,表示只有这一个方法经过跨域处理

在这里插入图片描述

但是它的默认值为*,也就是默认全部放行,理论来说不太安全

在这里插入图片描述

如果项目里面又多个controller或者多个方法,使用注解就会显得非常鸡肋,如果一个一个加太麻烦了,这时候就可以使用全局注解了

全局解决

原理:创建一个配置类,开启跨域注册,并使用@Configuration注解把这个类当作一个配置注入到项目中

我们可以自由配置请求方式,以及域名权限,请求时间,更加细度的去控制跨域范围

  1. package com.wyh.config; 
  2.  
  3. import org.springframework.context.annotation.Configuration; 
  4. import org.springframework.web.servlet.config.annotation.CorsRegistry; 
  5. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 
  6.  
  7. /** 
  8.  * @Description: 解决全局跨域 
  9.  * @Author: 魏一鹤 
  10.  * @Date: 2022-11-30 22:44 
  11.  **/ 
  12.  
  13. @Configuration 
  14. public class CorsMapping implements WebMvcConfigurer { 
  15.  
  16.     @Override 
  17.     /** 
  18.      * 重新跨域支持方法 
  19.      * CorsRegistry  开启跨域注册 
  20.      */ 
  21.     public void addCorsMappings(CorsRegistry registry) { 
  22.         //addMapping 添加可跨域的请求地址 
  23.         registry.addMapping("/**"
  24.                 //设置跨域 域名权限 规定由某一个指定的域名+端口能访问跨域项目 
  25.                 .allowedOrigins("*"
  26.                 //是否开启cookie跨域 
  27.                 .allowCredentials(false
  28.                 //规定能够跨域访问的方法类型 
  29.                 .allowedMethods("GET","POST","DELETE","PUT","OPTIONS"
  30.                 //添加验证头信息  token 
  31.                 //.allowedHeaders() 
  32.                 //预检请求存活时间 在此期间不再次发送预检请求 
  33.                 .maxAge(3600); 
  34.     } 

注意:千万不要忘了@Configuration注解,不然配置是无效的!!!

在这里插入图片描述

总结

以上就是SpringBoot解决全局和局部跨域问题的两种方式了,根据自己的需求灵活选择即可!

相关文章

站点信息