解决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日

相关文章

  • Servlet开发JavaWeb工程示例详解

    下面是关于“Servlet开发JavaWeb工程示例详解”的完整攻略: 1. 准备工作 在开始 Servlet 的开发之前,需要做一些准备工作: 安装 JDK 安装 Tomcat 配置环境变量 JDK 的安装和环境变量的配置这里就不再赘述,大家可以自行搜索相关教程进行操作。 Tomcat 的安装可以从官网下载对应版本的压缩包并解压,或者使用包管理器进行安装。…

    Java 2023年6月15日
    00
  • MyBatis注解开发之实现自定义映射关系和关联查询

    MyBatis注解开发之实现自定义映射关系和关联查询 什么是MyBatis注解? MyBatis是一款优秀的持久层框架,在开发过程中,我们需要使用XML来进行SQL的映射配置,这对于开发人员来说,可能存在一定的学习成本。 MyBatis注解是MyBatis框架提供的一种新的映射方式,它可以帮助我们在代码中轻松实现SQL映射配置,从而简化开发者的学习成本和开发…

    Java 2023年5月20日
    00
  • Java源码刨析之ArrayQueue

    Java源码刨析之ArrayQueue攻略 前言 在这篇文章中,我们将深入探究Java中ArrayQueue的实现原理。ArrayQueue是一种基于数组实现的队列,它的特点是入队和出队的时间复杂度均为O(1),空间复杂度为O(n)。其实现原理对于Java初学者而言可能略显复杂,但理解了其原理就可以举一反三,掌握更多队列的实现方式。 代码分析 数据结构 Ar…

    Java 2023年5月26日
    00
  • Spring Security全新版本使用方式

    下面是“Spring Security全新版本使用方式”的完整攻略。 一、什么是Spring Security? Spring Security是一个开源的安全框架,为Spring应用提供了一组安全服务,用于Web应用程序和服务保护。它提供了身份验证和授权,防止攻击,保护数据等一系列安全功能。因此Spring Security成为了Java领域中常用的安全框…

    Java 2023年6月3日
    00
  • SpringBoot整合liquibase的实现方法

    下面就是SpringBoot整合Liquibase的实现方法以及两个示例的详细攻略。 1. 什么是Liquibase Liquibase是一个持续性的数据库重构工具,它允许您对数据库模式进行版本控制。Liquibase是一个开源的重构工具,在Apache-2.0许可证下进行分发。 2. SpringBoot整合Liquibase 2.1 添加依赖 在Spri…

    Java 2023年5月19日
    00
  • Spring Boot 快速入门指南

    下面是关于 Spring Boot 快速入门指南的攻略: 概述 Spring Boot 是基于 Spring 框架的快速开发框架,通过自动装配和约定俗成的配置,可以快速搭建一个简单的 Java 应用。本文将介绍如何使用 Spring Boot 快速入门。 安装与配置 安装 Java 开发环境(JDK),最好使用 JDK 8 或以上版本。同时,也需要安装一个 …

    Java 2023年5月15日
    00
  • 详解Java对象结构与对象锁的升级

    详解Java对象结构与对象锁的升级 Java对象结构 Java对象在内存中的实际存储由三部分组成:对象头、实例数据和对齐填充。 对象头 对象头是Java对象的一部分,用于存储对象自己的运行时数据,包括以下内容: Mark Word: 用来锁定对象、记录对象哈希值、记录对象所属的分代年龄等信息。 Class: 指向对象的Class对象。 在Java 8中,对象…

    Java 2023年5月26日
    00
  • mybatis generator 配置 反向生成Entity简单增删改查(推荐)

    这里简单介绍一下使用MyBatis Generator配合MyBatis Plus快速生成增删改查的简单攻略,涉及到以下步骤: 添加相关依赖:在项目中添加MyBatis Generator依赖和MyBatis Plus依赖,例如在Maven项目中的pom.xml文件中添加如下依赖: <dependencies> <dependency&gt…

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