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 SpringBoot实现文件上传功能的示例代码

    下面是Java SpringBoot实现文件上传功能的详细攻略: 1. 项目依赖 首先需要在SpringBoot项目中引入以下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-…

    Java 2023年5月19日
    00
  • Java使用httpRequest+Jsoup爬取红蓝球号码

    下面是Java使用httpRequest+Jsoup爬取红蓝球号码的完整攻略。 1. 确定目标网站和爬取方式 首先要确定目标网站,这里以中国福利彩票双色球为例(http://www.cwl.gov.cn/kjxx/ssq/kjgg/)。双色球的开奖号码一般都是在晚上9点左右开奖,因此爬取频率要保持在一天只进行一次,以免被服务器屏蔽。另外,在爬取过程中需要保持…

    Java 2023年6月15日
    00
  • Java Apache POI报错“OldExcelFormatException”的原因与解决办法

    “OldExcelFormatException”是Java的Apache POI类库中的一个异常,通常由以下原因之一引起: 文件格式错误:如果文件不是Excel 2007或更高版本的.xlsx格式,则可能会出现异常。例如,可能会尝试读取旧版的Microsoft Excel文件或尝试读取其他文件类型。 以下是两个实例: 例1 文件格式错误,则可以尝试使用正确…

    Java 2023年5月5日
    00
  • Windows下tomcat安装教程

    下面是“Windows下Tomcat安装教程”的完整攻略。 准备工作 下载并安装JDK 访问JDK官网,根据你的Windows系统下载并安装对应版本的JDK。 安装JDK时记得要设置环境变量。 下载Tomcat 访问Tomcat官网,下载并选择合适的Tomcat版本。 下载完成后,解压Tomcat并将其放置在某个目录下。 安装Tomcat 打开命令提示符(W…

    Java 2023年5月19日
    00
  • 简易的投票系统以及js刷票思路和方法

    简易的投票系统 本文将介绍如何搭建一个简易的投票系统,并且针对该投票系统介绍js刷票思路和方法。 投票系统原理 投票系统的原理非常简单,只需要记录每个用户对每个选手的投票数即可。在展示投票结果时,对每个选手的投票数进行累加,从而得出该选手的总得票数,从高到低排序就可以得出投票结果。 实现步骤 定义数据库表 创建一个votes表,表结构如下: 字段名 类型 说…

    Java 2023年6月15日
    00
  • Java反射 PropertyDescriptor类案例详解

    “Java反射 PropertyDescriptor类案例详解”中,主要是对Java反射中的PropertyDescriptor类进行讲解,该类主要是用于访问JavaBean类的属性信息(就是通过get、set方法设置的属性),并可以会根据JavaBean对象来调用对应属性的get、set方法。下面详细介绍该攻略的完整过程。 1. PropertyDescr…

    Java 2023年6月15日
    00
  • SpringBoot 自定义注解实现涉密字段脱敏

    下面是详细的攻略: 简介 在实际项目中,很多时候需要对涉密字段进行脱敏,以保护用户隐私,比如手机号、身份证号、银行卡号等。本文将介绍如何使用 SpringBoot 自定义注解来实现涉密字段的脱敏功能。 步骤 定义注解 首先需要定义一个注解,用于标识需要脱敏的字段。可以自定义一个 @SensitiveInfo 注解,该注解可以用在类、字段、方法等地方。注解可以…

    Java 2023年6月3日
    00
  • 关于Springboot日期时间格式化处理方式总结

    关于Spring Boot日期时间格式化处理方式总结 在Spring Boot项目中,日期和时间的格式化处理是一个常见的需求。本文将总结Spring Boot中常见的日期时间格式化方式,以及如何在代码中应用它们。 1. 使用注解 在Spring Boot中,我们可以使用注解对于日期时间进行格式化。例如,我们可以使用@DateTimeFormat注解来指定日期…

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