Spring Boot项目解决跨域问题

本文介绍了跨域问题的产生原因,主要是浏览器的同源策略。通过在SpringBoot应用中配置CrosConfig类来允许跨域,但当使用SpringSecurity时,GET和DELETE请求仍可能因安全机制被拦截。解决方案是在SpringSecurity配置中添加允许跨域的设置,以确保所有请求都能正确跨域。同时提到了Nginx反向代理和前端配置跨域作为替代方案。
摘要由CSDN通过智能技术生成

跨域时前后端都会有的一个问题

什么是跨域?

  • 一个请求是由协议,域名,端口,三部分组成的,任何一部分缺失,都属于跨域请求。
http://xxxxx:8080/
http: 协议
xxxxx:域名
8080:端口

跨域产生的原因

  • 根本的原因是由于浏览器的同源政策

同源政策,百度百科给出了这么一段解释

同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。

通俗的说就是浏览器为了阻止来自同域名的js脚本和另一个域中的一些响应请求内容的交互。

在这里呢,我使用的是后端方式解决跨域问题:
解决的方式如下:

  • 首先在config层下创建一个类 CrosConfig 用来编写跨域配置:

代码如下:

package com.an.server.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 解决跨域问题
 *
 * @author An
 * @date 2022/2/22
 */
@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
                .allowCredentials(true)
                .maxAge(3600)
                .allowedHeaders("*");
    }
}

然后在运行Spring Boot 项目的时候
就会自动允许跨域请求,但是这样会的搭建不安全
建议使用Nginx反向代理,以及也可以在前端配置跨域请求。

可能会出现配置跨域然后跨域问题还是没有解决

我遇到的问题:

  • 在配置了跨域之后POST请求可以成功跨域,但是GET,DELETE等请求依然存在跨域问题,就很邪门,当时人都傻了,后来仔细研究发现,Spring Security框架是拦截跨域的,因为GET,DELETE请求是没有参数的,Security框架的安全机制会防止恶意多次请求。因此默认会被拦截。需要在Security中配置允许跨域。

可能出现的原因:
你的Spring Boot 项目中使用的安全框架是 Spring Security 那么Spring Security安全框架默认是拦截跨域的,因此你的跨域配置可能被Spring Security拦截了。

解决的方法:
在配置Spring Security的时候,复写configure(HttpSecurity http) 方法:
代码如下:

@Override
    protected void configure(HttpSecurity http) throws Exception {
        // 允许跨域
        http.cors().and().csrf().disable();
    }

然后重新运行Spring Boot项目!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值