SpringBoot解决跨域问题

SpringBoot整合WebMvcConfigurer解决前端跨域问题

一.前言

在这之前我们需要了解一下什么是跨域,为什么会出现跨域并复现一下这个问题。

1.1.什么是跨域

当协议、子域名、主域名、端口号中任意一个不相同时,都算作不同域。不同域之间相互请求资源,就算作“跨域”。

1.2.为什么会出现跨域

跨域是指浏览器不能执行来自其它网站的脚本,是由浏览器的同源策略造成的,是浏览器对JavaScript 施加的安全限制。

1.3.问题复现

如果我们没有配置跨域的话,我们通过vue访问我们的后端接口会出现如下错误。
在这里插入图片描述

二.解决方式

2.1.解决思路

我们可以使用接口编程的方式进行统一配置。创建配置类实现WebMvcConfigurer,重写addCorsMappings默认实现即可。

2.2.代码实现

我们将下面MyWebConfigurer类的addCorsMappings方法的registry参数的allowedOrigins修改为前端的域名再将其addMapping修改为要访问该域名下的资源。

package com.temperature.humidity.system.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;

/**
 * 跨域
 */
@Configuration
public class MyWebConfigurer implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry
                //为url添加映射路径(配置域名下的资源)
                .addMapping("/api/**")
                //配置允许访问的源,*表示允许全部域名。
                .allowedOrigins("http://192.168.10.58:8081")
                //设置允许的请求方式
                .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
                //设置允许的header
                .allowedHeaders("*")
                //设置是否允许发送Cookie,用于凭证请求,默认不发送cookie。
                .allowCredentials(true)
                //设置预检请求的有效时间
                .maxAge(300);
    }

}

三.测试

3.1.访问后端端口

我们通过前端框架访问上述出现问题的后端端口,如下所示。
在这里插入图片描述

3.2.后端返回的数据

可以看到后端给我们正常的返回了数据,如下所示。
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WebConfigurer跨域失败的原因是拦截器的存在。拦截器会让WebMvcConfigurer全局跨域配置失效。因此,如果你在WebMvcConfigurer中设置了跨域配置,而同时使用了拦截器,那么跨域配置就不会生效。 为了解决这个问题,可以使用过滤器来进行跨域处理。过滤器不会影响WebMvcConfigurer的全局跨域配置。所以,当需要同时使用拦截器和跨域配置时,可以考虑使用过滤器来处理跨域请求。 另外,如果你在WebMvcConfigurer中设置了跨域配置,但是在WebSecurityConfigurerAdapter中没有设置http.cors(),那么可能会导致一个问题。如果一个需要经过Spring Security过滤器验证的请求没有通过验证,那么该请求将不会交给WebMvcConfigurer的跨域过滤器处理。这会导致响应头中不会携带“Access-Control-Allow-Origin”字段,从而使浏览器认为服务器不接受该地址的跨域请求。为了避免这个问题,需要在WebSecurityConfigurerAdapter和WebMvcConfigurer中同时开启跨域设置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [配置WebMvcConfigurer全局跨域,不生效的原因及解决办法](https://blog.csdn.net/qq_41348755/article/details/124153635)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Springboot跨域失败,配置无效,原因出自SpringSecurity!](https://blog.csdn.net/GD_MRS_LIN/article/details/113573145)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值