解决SpringBoot跨域的三种方式

接下来我将详细讲解解决SpringBoot跨域的三种方式及示例操作。

一、什么是SpringBoot跨域

跨域是指在浏览器跨域请求时出现的安全限制,是由浏览器的同源策略造成的。简单来说,即浏览器的同源策略为了保证用户信息的安全,会限制页面发起跨域请求,从而避免恶意的数据访问和攻击。

而SpringBoot作为后台服务框架,不论是前端还是其他后台服务都可能通过http或者https协议与它进行交互,若存在跨域请求,就需要采取相应的措施解决跨域问题。

二、SpringBoot跨域的解决方式

共有三种方式解决SpringBoot跨域,分别是:

1. CorsFilter实现跨域

CorsFilter跨域的实现原理是在SpringBoot后端应用中添加一个CorsFilter类来解决跨域请求,CorsFilter类主要有两种方式实现:

第一种方式,使用Java配置

@Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurer() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("*")
                .allowedHeaders("*");
        }
    };
}

第二种方式,通过FilterRegistrationBean注册CorsFilter

@Bean
public FilterRegistrationBean corsFilter() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    CorsConfiguration config = new CorsConfiguration();
    config.addAllowedOrigin("*");
    config.addAllowedHeader("*");
    config.addAllowedMethod("*");
    source.registerCorsConfiguration("/**", config);
    FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter());
    bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
    return bean;
}

2. 使用SpringBoot自带的注解

SpringBoot提供了一个用于跨域的注解@CrossOrigin,只需在Controller类或者方法上添加注解即可实现跨域请求。

@RestController
@RequestMapping("/api")
@CrossOrigin(origins = "*")
public class UserController {
    //...
}

3. 使用第三方插件

还可以使用第三方插件解决SpringBoot跨域请求,比如Spring Cloud Gateway等。

三、示例演示

方式一:CorsFilter实现跨域

第一种方式:使用Java配置

在SpringBoot的初始化类中添加如下Java配置:

@Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurer() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                .allowedOrigins("http://localhost:8080")
                .allowedMethods("*");
        }
    };
}

其中,allowedOrigins是允许跨域请求的来源,可以指定多个,也可以使用*表示允许所有来源的请求。

第二种方式:通过FilterRegistrationBean注册CorsFilter

在SpringBoot的初始化类中添加如下Java配置:

@Bean
public FilterRegistrationBean corsFilter() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    CorsConfiguration config = new CorsConfiguration();
    config.addAllowedOrigin("http://localhost:8080");
    config.addAllowedMethod("*");
    source.registerCorsConfiguration("/**", config);
    FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter());
    bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
    return bean;
}

其中,allowedOriginsallowedMethods与上面的方式一中的解释相同。

方式二:使用SpringBoot自带的注解

在Controller类中添加如下注解:

@RestController
@RequestMapping("/api")
@CrossOrigin(origins = "http://localhost:8080")
public class UserController {
   //...
}

其中,origins是需要允许跨域请求的来源地址,可以指定多个,也可以使用*表示允许所有来源的请求。

方式三:使用第三方插件

在这里演示使用Spring Cloud Gateway作为第三方插件。首先,修改application.yml中的配置:

spring:
  cloud:
    gateway:
      routes:
        - id: user-service
          uri: http://localhost:8081
          predicates:
            - Path=/user/**
          filters:
            - name: Cors
              args:
                allowedOrigins: "*"
                allowedMethods: "GET,POST,PUT,DELETE,OPTIONS"

其中,allowedOriginsallowedMethods的解释与之前相同。

四、总结

本文详细介绍了SpringBoot解决跨域请求的三种方式及示例操作,读者应该通过本文可以了解到如何在SpringBoot中解决跨域问题,提高SpringBoot应用程序的安全性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解决SpringBoot跨域的三种方式 - Python技术站

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

相关文章

  • 详解SpringBoot 创建定时任务(配合数据库动态执行)

    先来介绍一下 SpringBoot 这个框架。SpringBoot 是一款基于 Spring 框架的快速开发框架,能够帮助开发者快速搭建 Spring 应用,极大地提高了开发效率。在 SpringBoot 中,我们可以非常简单地创建定时任务并进行动态执行,下面是详解 SpringBoot 创建定时任务(配合数据库动态执行)的攻略: 一、引入相关依赖 在创建我…

    Java 2023年5月20日
    00
  • Java IO及BufferedReader.readline()出现的Bug

    关于“Java IO及BufferedReader.readline()出现的Bug”,我们需要注意以下两点: 1. Java IO 中的缓存问题 Java的IO操作是基于缓存进行的,而很多读取函数如BufferedReader. readline()是以换行符作为结束标记的,但是我们在编写代码时常常忽略了特殊情况的处理,导致出现了缓存问题,例如一次读取操作…

    Java 2023年5月27日
    00
  • IDEA创建Java Web项目不能及时刷新HTML或JSP页面问题

    当使用IntelliJ IDEA创建Java Web项目并且编写HTML或JSP页面时,可能会遇到页面不能及时刷新的问题,这是由于IDEA默认采用了缓存机制导致的。为了解决这个问题,可以执行以下步骤: 1. 关闭缓存 通过在IDEA的Editor部分中找到Editor > General > Editor Tabs选项,并勾选“Mark modi…

    Java 2023年6月15日
    00
  • JDBC连接MySQL5.7的方法

    JDBC是Java语言操作数据库的标准接口,而MySQL是目前最受欢迎的开源数据库之一。在本文中,我们将探讨如何使用JDBC连接MySQL 5.7数据库。 步骤1:下载MySQL JDBC驱动程序 首先,我们需要下载MySQL官方提供的JDBC驱动程序,从而能够在Java应用程序中访问MySQL 5.7数据库。你可以从以下链接下载最新的MySQL JDBC驱…

    Java 2023年6月16日
    00
  • 详解如何在Spring Security中自定义权限表达式

    在对Spring Security中自定义权限表达式的攻略之前,先简单介绍一下权限表达式的作用: Spring Security中的权限表达式用于在方法调用或请求访问时,判断当前用户是否具有访问权限。Spring Security提供了很多默认的权限表达式,例如”hasRole()”和”hasAnyRole()”等。但是,我们有时需要根据不同的业务需求来自定…

    Java 2023年5月20日
    00
  • 利用Spring boot如何创建简单的web交互应用

    使用Spring Boot创建简单的Web交互应用的完整攻略如下: 创建Spring Boot项目 首先,我们需要创建一个Spring Boot项目。可以使用Spring Initializr来创建一个新的Spring Boot项目。以下是创建Spring Boot项目的步骤: 打开Spring Initializr网站,选择项目的类型和语言,然后点击Gen…

    Java 2023年5月15日
    00
  • maven为MANIFEST.MF文件添加内容的方法

    下面是使用 Maven 为 MANIFEST.MF 文件添加内容的方法的详细攻略。 1. 使用 Maven 插件配置 MANIFEST.MF 文件 Maven 提供了一个叫做 maven-jar-plugin 的插件,可以在 Maven 构建过程中配置 MANIFEST.MF 文件。我们可以通过在 pom.xml 文件中配置此插件来实现在 MANIFEST.…

    Java 2023年5月20日
    00
  • Java Stream常见用法汇总,开发效率大幅提升

    本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~ Github地址 如果访问不了Github,可以访问gitee地址。 gitee地址 Java8 新增的 St…

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