SpringBoot后端解决跨域问题的3种方案分享

 更新时间:2023年07月12日 16:22:51   作者:Leon_coding  
这篇文章主要给大家分享介绍了关于SpringBoot后端解决跨域问题的3种方案,跨域指的是浏览器不能执行其他网站的脚本,它是由浏览器的同源策略造成的,是浏览器施加的安全限制,需要的朋友可以参考下

1.跨域的介绍

跨源资源共享(CORS——Cross-Origin Resource Sharing,跨源资源共享,或通俗地译为跨域资源共享)是一种基于 HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其它源(域、协议或端口),使得浏览器允许这些源访问加载自己的资源。跨源资源共享还通过一种机制来检查服务器是否会允许要发送的真实请求,该机制通过浏览器发起一个到服务器托管的跨源资源的“预检”请求。在预检中,浏览器发送的头中标示有 HTTP 方法和真实请求中会用到的头。

2.跨域产生原因

跨域问题所产生的原因是浏览器的“同源策略”所导致的。什么是同源策略呢,就是浏览器规定了,我当前页面和请求页面的 1网络协议、2主机域名、3端口,这三部分必须保证一模一样才行。如下图:

这也主要是浏览器为了保证用户上网的基本安全需求而设置的。

1.为了防止恶意网页可以获取其他网站的本地数据。

2.为了防止恶意网站iframe其他网站的时候,获取数据。

3.为了防止恶意网站在自已网站有访问其他网站的权利,以免通过cookie免登,拿到数据。

3.跨域的解决方案

跨域的解决方案有很多种,前后端都有。这里主要介绍下我所知道的三种方案,并配以代码展示。

1.在后端被访问代码的方法上加注解@CrossOrign。这个注解是spring-web中的注解,我们只需在方法上面加注之后,就会解决CORS问题。例如:

/**
     * 获取用户信息
     * 
     * @return 用户信息
     */
    @GetMapping("getInfo")
    @CrossOrigin
    public AjaxResult getInfo()
    {
        SysUser user = SecurityUtils.getLoginUser().getUser();
        // 角色集合
        Set<String> roles = permissionService.getRolePermission(user);
        // 权限集合
        Set<String> permissions = permissionService.getMenuPermission(user);
        AjaxResult ajax = AjaxResult.success();
        ajax.put("user", user);
        ajax.put("roles", roles);
        ajax.put("permissions", permissions);
        return ajax;
    }

但是,后端有很多被访问的方法,我们不能在每个方法上面都加上这个注解,代码冗余。所以就有了第二种方法,我们可以添加一个过滤器,来解决CORS问题,代码如下:

 
@Configuration
public class CORSFilter {
    @Bean
    public CorsFilter corsFilter(){
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.addAllowedMethod("*");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**",corsConfiguration);
        return new CorsFilter(source);
    }
}

还有一种解决方法,我们可以通过实现接口并重写方法来解决跨域问题,代码如下:

@Configuration
public class CORSConfiguration implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOriginPatterns("*")
                .allowedMethods("GET","POST","PUT","HEAD")
                .allowCredentials(true)
                .allowedHeaders("*")
                .maxAge(3600);
    }
}

通过这三种方式,我们就可以解决CORS跨域问题。

总结

到此这篇关于SpringBoot后端解决跨域问题的3种方案的文章就介绍到这了,更多相关后端跨域问题解决内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java别说取余(%)运算简单你真的会吗

    Java别说取余(%)运算简单你真的会吗

    这篇文章主要介绍了Java别说取余(%)运算简单你真的会吗,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • java中超过long范围的超大整数相加算法详解(面试高频)

    java中超过long范围的超大整数相加算法详解(面试高频)

    这篇文章主要介绍了java中超过long范围的超大整数相加算法(面试高频),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Spring Boot存在路径遍历漏洞CVE-2021-22118的问题解析

    Spring Boot存在路径遍历漏洞CVE-2021-22118的问题解析

    CVE-2021-22118 是一个在 Spring Boot 中发现的漏洞,该漏洞关系到 Spring Boot 的开发者工具(Devtools)中的远程更新(Remote Update)功能,这篇文章主要介绍了Spring Boot存在路径遍历漏洞CVE-2021-22118,需要的朋友可以参考下
    2023-09-09
  • Git和Maven的子模块简单实践

    Git和Maven的子模块简单实践

    今天小编就为大家分享一篇关于Git和Maven的子模块简单实践,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • java 实现Comparable接口排序,升序、降序、倒叙

    java 实现Comparable接口排序,升序、降序、倒叙

    这篇文章主要介绍了java 实现Comparable接口排序,升序、降序、倒叙,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • springboot使用Redis队列实战

    springboot使用Redis队列实战

    本文主要介绍了springboot使用Redis队列实战,包含四种实现方式,基于List的 LPUSH+BRPOP的实现, 基于Sorted-Set的实现,PUB/SUB订阅/发布模式和基于Stream类型的实现,感兴趣的可以了解一下
    2024-07-07
  • Java 添加、删除、格式化Word中的图片步骤详解( 基于Spire.Cloud.SDK for Java )

    Java 添加、删除、格式化Word中的图片步骤详解( 基于Spire.Cloud.SDK for Java )

    这篇文章主要介绍了Java 添加、删除、格式化Word中的图片( 基于Spire.Cloud.SDK for Java ),本文分步骤通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Jvm调优和SpringBoot项目优化的详细教程

    Jvm调优和SpringBoot项目优化的详细教程

    这篇文章主要介绍了Jvm调优和SpringBoot项目优化,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Java实例讲解Comparator的使用

    Java实例讲解Comparator的使用

    我们先介绍一下comparator,我们后文称为比较器。比较器实际上是一个实现了comparator interface是一个实例,在Arrays.sort方法我们可以提供这样一个实例,即使被排序的object没有实现comparable接口,我们也可以排序了
    2022-11-11
  • 基于SpringBoot实现Web应用的登录与退出功能

    基于SpringBoot实现Web应用的登录与退出功能

    登录与退出功能作为 Web 应用中的基础且重要的组成部分,直接关系到用户的安全和隐私保护,所以本文给大家介绍了基于SpringBoot实现Web应用的登录与退出功能,文中有详细的代码供大家参考,需要的朋友可以参考下
    2024-04-04

最新评论