Spring MVC 与 CORS跨域的详细介绍

Spring MVC 与 CORS跨域的详细介绍

在Web开发中,跨域请求是一种常见的需求。CORS(Cross-Origin Resource Sharing)是一种机制,它允许Web应用程序从不同的域访问其资源。本文将详细介绍Spring MVC与CORS跨域的相关知识,并提供两个示例说明。

CORS跨域的实现原理

CORS跨域的实现原理是通过在HTTP响应头中添加Access-Control-Allow-Origin字段来实现的。当浏览器发现请求的响应头中包含Access-Control-Allow-Origin字段时,它会允许跨域请求。如果响应头中没有包含Access-Control-Allow-Origin字段,浏览器将拒绝跨域请求。

Spring MVC中的CORS跨域配置

在Spring MVC中,我们可以通过添加@CrossOrigin注解或配置CorsFilter来实现CORS跨域。下面分别介绍这两种方式的实现方法。

使用@CrossOrigin注解实现CORS跨域

@CrossOrigin注解是Spring MVC提供的一种简单的方式来实现CORS跨域。我们可以在Controller类或方法上添加@CrossOrigin注解来允许跨域请求。下面是一个使用@CrossOrigin注解实现CORS跨域的示例:

@RestController
@RequestMapping("/api")
public class ApiController {

    @CrossOrigin(origins = "http://localhost:8080")
    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
}

在上面的示例中,我们在ApiController类的hello方法上添加了@CrossOrigin注解,并指定了允许跨域请求的源地址为"http://localhost:8080"。

使用CorsFilter实现CORS跨域

除了使用@CrossOrigin注解外,我们还可以通过配置CorsFilter来实现CORS跨域。下面是一个使用CorsFilter实现CORS跨域的示例:

@Configuration
public class CorsConfig {

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

在上面的示例中,我们创建了一个名为CorsConfig的配置类,并在其中定义了一个名为corsFilter的CorsFilter对象。在corsFilter对象中,我们使用UrlBasedCorsConfigurationSource类来配置CORS跨域,允许所有来源、所有请求头和所有请求方法。

示例

以下是两个示例演示如何在Spring MVC中实现CORS跨域:

示例一

  1. 创建一个名为spring-mvc-demo的Maven项目。

  2. 创建一个名为ApiController的Controller类。

@RestController
@RequestMapping("/api")
public class ApiController {

    @CrossOrigin(origins = "http://localhost:8080")
    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
}

在上面的示例中,我们创建了一个名为ApiController的Controller类,并使用@RestController注解标记它。在Controller中,我们使用@CrossOrigin注解来允许跨域请求,并使用@GetMapping注解标记处理GET请求的方法。

  1. 创建一个名为index.html的HTML文件。
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Spring MVC CORS Demo</title>
</head>
<body>
    <button onclick="sendRequest()">Send Request</button>
    <script>
        function sendRequest() {
            var xhr = new XMLHttpRequest();
            xhr.open('GET', 'http://localhost:8081/api/hello');
            xhr.onload = function() {
                alert(xhr.responseText);
            };
            xhr.send();
        }
    </script>
</body>
</html>

在上面的示例中,我们创建了一个名为index.html的HTML文件,并在其中添加了一个按钮和一个JavaScript函数。当用户点击按钮时,JavaScript函数会发送一个跨域请求,并弹出响应结果。

  1. 启动应用程序并访问index.html文件。

在上面的示例中,我们使用8081端口启动应用程序,并访问index.html文件。当用户点击按钮时,JavaScript函数会发送一个跨域请求,并弹出响应结果。

示例二

  1. 创建一个名为spring-mvc-demo的Maven项目。

  2. 创建一个名为ApiController的Controller类。

@RestController
@RequestMapping("/api")
public class ApiController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, World!";
    }
}

在上面的示例中,我们创建了一个名为ApiController的Controller类,并使用@RestController注解标记它。在Controller中,我们使用@GetMapping注解标记处理GET请求的方法。

  1. 创建一个名为CorsConfig的配置类。
@Configuration
public class CorsConfig {

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

在上面的示例中,我们创建了一个名为CorsConfig的配置类,并在其中定义了一个名为corsFilter的CorsFilter对象。在corsFilter对象中,我们使用UrlBasedCorsConfigurationSource类来配置CORS跨域,允许所有来源、所有请求头和所有请求方法。

  1. 创建一个名为index.html的HTML文件。
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Spring MVC CORS Demo</title>
</head>
<body>
    <button onclick="sendRequest()">Send Request</button>
    <script>
        function sendRequest() {
            var xhr = new XMLHttpRequest();
            xhr.open('GET', 'http://localhost:8081/api/hello');
            xhr.onload = function() {
                alert(xhr.responseText);
            };
            xhr.send();
        }
    </script>
</body>
</html>

在上面的示例中,我们创建了一个名为index.html的HTML文件,并在其中添加了一个按钮和一个JavaScript函数。当用户点击按钮时,JavaScript函数会发送一个跨域请求,并弹出响应结果。

  1. 启动应用程序并访问index.html文件。

在上面的示例中,我们使用8081端口启动应用程序,并访问index.html文件。当用户点击按钮时,JavaScript函数会发送一个跨域请求,并弹出响应结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring MVC 与 CORS跨域的详细介绍 - Python技术站

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

相关文章

  • java日期格式化SimpleDateFormat的使用详解

    Java日期格式化SimpleDateFormat的使用详解 概述 在Java编程中,我们经常需要将日期时间类型的数据格式化成我们需要的字符串格式。Java提供了一个SimpleDateFormat类,可以帮助我们将日期时间类型的数据格式化为指定的字符串格式。 SimpleDateFormat类可以在Java的java.text包中找到,它是一个具有丰富功能…

    Java 2023年5月20日
    00
  • Servlet方法生命周期及执行原理详解

    Servlet 方法生命周期 Servlet 是运行在服务器上的 Java 程序,它提供了动态创建 Web 页面的能力。在 Servlet 的生命周期中,有以下三个阶段: 1.1. 初始化 init()在 Servlet 被创建后,即在第一次被客户端请求访问时,容器会加载并初始化 Servlet 类,执行 init() 方法。 1.2. 请求处理 servi…

    Java 2023年5月23日
    00
  • Java-String类最全汇总(下篇)

    下面是Java-String类最全汇总(下篇)的完整攻略。 一、简介 在Java编程中,String类是非常重要的一个类,用于表示字符串,并提供了一系列的操作字符串的方法。本文主要介绍了String类的一些常用操作方法,包括字符串的查找、替换、截取、比较等。 二、字符串查找 2.1 indexOf方法 该方法用于查找字符串中是否包含指定的子串并返回第一次出现…

    Java 2023年5月20日
    00
  • java 枚举类定义静态valueOf(java.lang.String)方法的问题及解决

    我可以为你详细讲解“java 枚举类定义静态valueOf(java.lang.String)方法的问题及解决”的完整攻略。具体过程如下: 1. 问题描述 在Java枚举类中,通常会定义一个静态的 valueOf(java.lang.String) 方法,用于根据字符串值获取对应的枚举值。例如: public enum Color { RED, GREEN,…

    Java 2023年5月27日
    00
  • 实例讲解JSP Model2体系结构(中)

    下面我来详细讲解“实例讲解JSP Model2体系结构(中)”的完整攻略。 前言 在使用JSP开发Web项目时,选择合适的体系结构可以大大提高代码的可维护性和重用性。其中JSP Model2体系结构是一种较为流行的结构。 什么是JSP Model2体系结构? JSP Model2体系结构,简称MVC,是一种将业务逻辑、数据、界面分别封装的设计模式。其核心思想…

    Java 2023年6月15日
    00
  • 如何让Jackson JSON生成的数据包含的中文以unicode方式编码

    要让 Jackson JSON 生成的数据包含的中文以 unicode 方式编码,我们可以借助 Jackson 提供的 ObjectMapper 对象以及 JsonGenerator 对象,具体步骤如下: 创建 ObjectMapper 对象,并配置生成 JSON 格式的选项: ObjectMapper mapper = new ObjectMapper()…

    Java 2023年5月20日
    00
  • 常见的排序算法,一篇就够了

    常见的排序算法 排序算法是计算机程序中常见的基本操作之一,它的作用是将一组无序的数据按照某种规则进行排序。在实际的开发中,经常需要对数据进行排序,比如搜索引擎中对搜索结果的排序、电商网站中对商品的排序等。 目前常见的排序算法有多种,下面将对一些常见的排序算法进行介绍: 1. 冒泡排序 冒泡排序是一种简单的排序算法,它重复地遍历要排序的数据,每次比较相邻的两个…

    Java 2023年5月19日
    00
  • SpringBoot外部化配置使用Plus版的方法示例

    Spring Boot通过外部化配置来让应用程序在不同环境下以相同的代码运行。配置数据可以存储在不同的位置和形式,并且可以通过属性文件、yaml文件、环境变量等多种方式进行配置。 1. 引入外部化配置的依赖 在pom.xml文件中,引入以下依赖即可实现外部化配置功能: <dependency> <groupId>org.springf…

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