接下来我将详细讲解解决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;
}
其中,allowedOrigins
和allowedMethods
与上面的方式一中的解释相同。
方式二:使用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"
其中,allowedOrigins
和allowedMethods
的解释与之前相同。
四、总结
本文详细介绍了SpringBoot解决跨域请求的三种方式及示例操作,读者应该通过本文可以了解到如何在SpringBoot中解决跨域问题,提高SpringBoot应用程序的安全性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解决SpringBoot跨域的三种方式 - Python技术站