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跨域:
示例一
-
创建一个名为spring-mvc-demo的Maven项目。
-
创建一个名为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请求的方法。
- 创建一个名为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函数会发送一个跨域请求,并弹出响应结果。
- 启动应用程序并访问index.html文件。
在上面的示例中,我们使用8081端口启动应用程序,并访问index.html文件。当用户点击按钮时,JavaScript函数会发送一个跨域请求,并弹出响应结果。
示例二
-
创建一个名为spring-mvc-demo的Maven项目。
-
创建一个名为ApiController的Controller类。
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
}
在上面的示例中,我们创建了一个名为ApiController的Controller类,并使用@RestController注解标记它。在Controller中,我们使用@GetMapping注解标记处理GET请求的方法。
- 创建一个名为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跨域,允许所有来源、所有请求头和所有请求方法。
- 创建一个名为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函数会发送一个跨域请求,并弹出响应结果。
- 启动应用程序并访问index.html文件。
在上面的示例中,我们使用8081端口启动应用程序,并访问index.html文件。当用户点击按钮时,JavaScript函数会发送一个跨域请求,并弹出响应结果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring MVC 与 CORS跨域的详细介绍 - Python技术站