SpringSecurity导致SpringBoot跨域失效的问题解决

首先需要明确的是,Spring Boot是默认开启CSRF保护的。而Spring Security也是默认开启CSRF保护的。当二者共存时,常常会产生CSRF保护机制引起的跨域问题。那么如何解决SpringSecurity导致SpringBoot跨域失效的问题呢?下面给出完整攻略。

1. 禁用Spring Security的CSRF保护

第一种解决方式是禁用Spring Security的CSRF保护。在Spring Security的配置类中,通过关闭CSRF保护的方式解决跨域问题。

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
        //配置其他Spring Security相关的代码
    }
}

上述代码中的 http.csrf().disable() 就是禁用CSRF保护的方式,Spring Security的其他相关配置可以按照需求进行配置。

2. 配置Spring Boot的CORS支持

第二种解决方式是通过配置Spring Boot的CORS(跨域资源共享)支持解决跨域问题。

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        //允许所有的请求来源
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .allowedHeaders("*")
                .allowCredentials(true);
    }
}

上述代码中的 registry.addMapping("/**") 表示允许所有的请求来源,allowedMethods() 表示允许的请求方法,allowedHeaders() 表示允许的请求头部,allowCredentials(true) 表示允许跨域携带cookie等身份信息。

此外,在Spring Boot的配置文件application.yml或application.properties中,需要加入如下配置项:

#配置CORS支持
spring:
  cors:
    allowed-origins: "*"
    allowed-methods: "GET,POST,PUT,DELETE"
    allowed-headers: "*"
    allow-credentials: true

上述配置中的 allowed-origins 表示允许的请求来源,allowed-methods 表示允许的请求方法,allowed-headers 表示允许的请求头部,allow-credentials 表示允许跨域携带cookie等身份信息。

下面给出两条示例:

示例一:禁用Spring Security的CSRF保护

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
        //配置其他Spring Security相关的代码
    }
}

示例二:配置Spring Boot的CORS支持

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .allowedHeaders("*")
                .allowCredentials(true);
    }
}
#配置CORS支持
spring:
  cors:
    allowed-origins: "*"
    allowed-methods: "GET,POST,PUT,DELETE"
    allowed-headers: "*"
    allow-credentials: true

希望上述攻略能够帮助你解决SpringSecurity导致SpringBoot跨域失效的问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringSecurity导致SpringBoot跨域失效的问题解决 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java 互相关联的实体无限递归问题的解决

    为了解决Java中互相关联的实体无限递归问题,需要采用以下方法: 1. 取消循环引用 如果两个实体相互引用,将导致无限递归的问题。可以采用将其中一个实体上的引用取消掉的办法。例如下面这个Java代码示例: public class Person { private List<Person> friends; //其他属性和方法 } 上述代码中,P…

    Java 2023年5月19日
    00
  • 浅谈Java中实现深拷贝的两种方式—clone() & Serialized

    Java中实现对象拷贝通常有两种方式:浅拷贝和深拷贝。浅拷贝只复制原对象中所有基本数据类型的值和引用类型变量的地址,而深拷贝则是在堆中重新开辟空间,将原对象的所有属性都复制到新的对象中去,新的对象与原始对象没有任何关联。本文将讲解Java中实现深拷贝的两种方式:clone()和Serialized。 使用clone()方法实现深拷贝 Java中Object类…

    Java 2023年5月19日
    00
  • java多线程实现有序输出ABC

    要实现有序输出ABC,可以通过以下几种方式实现: 方式一:使用synchronized关键词 在Java中,synchronized关键字可以锁住对象,只允许一个线程访问同一时间内执行的代码块。我们可以使用该关键字来实现对三个线程输出ABC顺序的控制。 public class ABCPrinter implements Runnable { private…

    Java 2023年5月19日
    00
  • 浅谈Spring Data如何简化数据操作的方法

    浅谈Spring Data如何简化数据操作的方法 对于数据操作,Spring Data 提供了一种简单高效的解决方案。该方案旨在尽量减少代码量,同时提供易于使用的API以简化开发。下面我们将从以下三个方面介绍 Spring Data: Spring Data 的架构 Spring Data 的特点 Spring Data 的常用操作 Spring Data …

    Java 2023年5月20日
    00
  • 5分钟快速了解String.trim()到底做了什么事

    当我们使用Java字符串时,我们可以使用trim()方法来去除字符串的首尾空格。 一、什么是String.trim()方法? String.trim()方法属于Java String类的一个方法,用于去除字符串的首尾空格。该方法返回一个新的字符串,而不是修改原始字符串。 二、String.trim()方法的使用 在Java编程中,我们可以使用String.t…

    Java 2023年5月20日
    00
  • 通过url查找a元素应用案例

    通过URL查找a元素是前端开发中非常常见的操作,可以用于抓取网页中的链接元素,或者对特定链接进行操作。这里提供一个完整的攻略,帮助大家更好地理解如何实现这一功能。 步骤一:获取页面源代码 首先需要获取目标网页的源代码,在JavaScript中可以使用XMLHttpRequest或Fetch等工具来进行网络请求,获取网页文本。 fetch(url) .then…

    Java 2023年6月15日
    00
  • Springboot项目的搭建教程(分离出common父依赖)

    下面是 Spring Boot 项目搭建教程,包含分离出 common 父依赖的步骤: 1. 环境搭建 首先需要保证本地环境已经安装了 JDK 和 Maven。在命令行输入: java -version mvn -v 上述命令输出正常,则说明环境已经搭建好了。 2. 创建 Maven 工程 在命令行输入以下命令: mvn archetype:generate…

    Java 2023年5月19日
    00
  • 让你五分钟彻底理解Spring MVC

    让我来讲解一下“让你五分钟彻底理解Spring MVC”的攻略。 1. 了解Spring MVC的架构 Spring MVC是基于Model-View-Controller(MVC)设计模式的Web框架,它通过Dispatcher Servlet和Handler Mapping来连接Web请求和处理器(Controller)。通过View Resolver将…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部