当前位置:   article > 正文

【SpringBoot系列】实现跨域的几种方式_springboot跨域注解

springboot跨域注解


579a429daf314744b995f37351b46548

前言

Web开发中,跨域是一个常见的问题。由于浏览器的同源策略,一个Web应用程序只能访问与其自身同源(即,相同协议、主机和端口)的资源。

这种策略的存在是为了保护用户的安全,防止恶意网站读取或修改用户的数据。

然而,现代Web应用程序经常需要访问不同源的资源,这就需要实现跨域。

本文将介绍在SpringBoot中实现跨域的几种方式。


一、什么是跨域

跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,或者涉及到两个不同域名的资源之间的交互。

由于同源策略(Same Origin Policy)的限制,浏览器不允许跨域请求。同源策略规定,A网页设置的Cookie、LocalStorage和IndexDB无法被同源以外的网页读取。

跨域请求会被浏览器拒绝。举个例子:- DOMAIN-A.comDOMAIN-B.com 是两个不同的域名,它们之间的请求就是跨域请求。

二、跨域问题出现的原因

  1. 浏览器的同源策略(Same Origin Policy)限制了跨域请求。主要出于安全考虑,浏览器限制脚本只能读取与之同源的资源。同源指的是协议、域名、端口都相同。跨域请求会因为违反同源策略而被阻止。
  2. Cookie和本地存储也遵循同源策略。A域名下的页面无法读取B域名下的Cookie、localStorage等。
  3. 跨域JavaScript请求会报错。比如A页面请求B页面的JS文件,就会报错。
  4. 跨域DOM无法访问。A页面的JS无法获取B页面的DOM节点。
  5. 跨域数据请求需要进行CORS预检。浏览器会在正式通信之前,先进行一次HTTP查询请求,询问服务器是否允许跨源请求。
  6. iframe也受同源策略限制。A页面的iframe嵌入B页面,A页面JS无法访问iframe的DOM。
  7. 跨域图片获取限制。A页面无法获取B页面img标签的src,会报错。

三、常见的跨域请求方式

  1. JSONP:通过script标签加载JS文件来实现跨域通信。
  2. CORS:服务器端设置HTTP头,允许指定的请求来源跨域访问。
  3. postMessage:A域的window向B域的window发送消息,实现跨域通信。

四、SpringBoot实现跨域的几种方式

1.@crossOrigin 注解

我们可以在Controller的方法上直接使用@CrossOrigin注解

,如:

@CrossOrigin(origins = "http://domain1.com")
@RestController
public class TestController {
    @GetMapping("/test")
    public String test() {
        return "hello";
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这种方式简单适用,但是不能应对所有的跨域请求,比较局限。

2.过滤器CorsFilter

我们可以注册CorsFilter跨域过滤器,

如:

@Configuration
public class CorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedOrigin("http://domain1.com");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

然后该过滤器会应用到所有的请求上。这种方式配置更加灵活。

3.配置类WebMvcConfigurer

我们可以在WebMvcConfigurer接口的addCorsMappings()方法中添加跨域配置,

如:

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
            .allowedOrigins("http://domain1.com")
            .allowedMethods("GET", "POST", "PUT", "OPTIONS", "DELETE", "PATCH")
            .allowedHeaders("*")
            .allowCredentials(true);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

这也是一种比较常用的跨域解决方案。


总结

以上就是我们在SpringBoot中实现跨域的几种方法。每种方法都有其适用的场景和优缺点,你应该根据你的具体需求选择合适的方法。

希望这篇文章能够帮助你解决跨域问题,提升你的Web开发能力。

如果你在实践中遇到任何问题,都可以查阅相关资料或者向社区寻求帮助。

最后,记住,成为一名优秀的Web开发者需要不断学习和实践。


写在最后

感谢您的支持和鼓励!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/458818
推荐阅读
相关标签