Spring Boot跨域配置

简介: Spring Boot 2.0.x ---> 2.3.x 版本跨域配置

1,采用内置默认跨域过滤器的方式指定默认的跨域配置。

编写配置Bean

MagicalCorsProperties

importcom.google.common.base.MoreObjects;
importjava.io.Serializable;
importjava.util.ArrayList;
importjava.util.Collections;
importjava.util.List;
importorg.springframework.boot.context.properties.ConfigurationProperties;
importorg.springframework.stereotype.Component;
/*** 跨域自动配置* @author Jeckxu*/@Component@ConfigurationProperties(prefix=MagicalCorsProperties.PRE_FIX)
publicclassMagicalCorsPropertiesimplementsSerializable {
publicstaticfinalStringPRE_FIX="magical.cors.default";
privateBooleanenabled=true;
privateStringpathPattern="/cors/**";
privateList<String>allowedOrigins=Collections.singletonList("*");
privateList<String>allowedHeaders=Collections.singletonList("*");
privateList<String>allowedMethods=Collections.singletonList("*");
privateList<String>exposedHeaders=newArrayList<>();
privateLongmaxAge=3600L;
privateBooleanallowCredentials=Boolean.TRUE;
publicBooleangetEnabled() {
returnenabled;
   }
publicvoidsetEnabled(Booleanenabled) {
this.enabled=enabled;
   }
publicStringgetPathPattern() {
returnpathPattern;
   }
publicvoidsetPathPattern(StringpathPattern) {
this.pathPattern=pathPattern;
   }
publicList<String>getAllowedOrigins() {
returnallowedOrigins;
   }
publicvoidsetAllowedOrigins(List<String>allowedOrigins) {
this.allowedOrigins=allowedOrigins;
   }
publicList<String>getAllowedHeaders() {
returnallowedHeaders;
   }
publicvoidsetAllowedHeaders(List<String>allowedHeaders) {
this.allowedHeaders=allowedHeaders;
   }
publicList<String>getAllowedMethods() {
returnallowedMethods;
   }
publicvoidsetAllowedMethods(List<String>allowedMethods) {
this.allowedMethods=allowedMethods;
   }
publicList<String>getExposedHeaders() {
returnexposedHeaders;
   }
publicvoidsetExposedHeaders(List<String>exposedHeaders) {
this.exposedHeaders=exposedHeaders;
   }
publicLonggetMaxAge() {
returnmaxAge;
   }
publicvoidsetMaxAge(LongmaxAge) {
this.maxAge=maxAge;
   }
publicBooleangetAllowCredentials() {
returnallowCredentials;
   }
publicvoidsetAllowCredentials(BooleanallowCredentials) {
this.allowCredentials=allowCredentials;
   }
@OverridepublicStringtoString() {
returnMoreObjects.toStringHelper(this)
         .add("enabled", enabled)
         .add("pathPattern", pathPattern)
         .add("allowedOrigins", allowedOrigins)
         .add("allowedHeaders", allowedHeaders)
         .add("allowedMethods", allowedMethods)
         .add("exposedHeaders", exposedHeaders)
         .add("maxAge", maxAge)
         .add("allowCredentials", allowCredentials)
         .toString();
   }
}

编写自动配置类

MagicalCorsAutoConfiguration

importorg.jeckxu.magical.core.boot.props.MagicalCorsProperties;
importorg.jeckxu.magical.core.launch.destroy.MagicalDestroying;
importorg.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;
importorg.springframework.web.cors.CorsConfiguration;
importorg.springframework.web.cors.UrlBasedCorsConfigurationSource;
importorg.springframework.web.filter.CorsFilter;
/*** @author xuchangjiang*/@Configuration@ConditionalOnProperty(value=MagicalCorsProperties.PRE_FIX+".enabled", havingValue="true", matchIfMissing=true)
publicclassMagicalCorsAutoConfigurationimplementsMagicalDestroying {
privatefinalMagicalCorsPropertiesmagicalCorsProperties;
publicMagicalCorsAutoConfiguration(MagicalCorsPropertiesmagicalCorsProperties) {
this.magicalCorsProperties=magicalCorsProperties;
   }
/*** 默认跨域过滤器* @return*/@BeanpublicCorsFiltercorsFilter() {
CorsConfigurationcorsConfiguration=newCorsConfiguration();
magicalCorsProperties.getAllowedOrigins().forEach(corsConfiguration::addAllowedOrigin);
magicalCorsProperties.getExposedHeaders().forEach(corsConfiguration::addExposedHeader);
magicalCorsProperties.getAllowedHeaders().forEach(corsConfiguration::addAllowedHeader);
magicalCorsProperties.getAllowedMethods().forEach(corsConfiguration::addAllowedMethod);
corsConfiguration.setAllowCredentials(magicalCorsProperties.getAllowCredentials());
UrlBasedCorsConfigurationSourcecorsConfigurationSource=newUrlBasedCorsConfigurationSource();
corsConfigurationSource.registerCorsConfiguration(magicalCorsProperties.getPathPattern(), corsConfiguration);
returnnewCorsFilter(corsConfigurationSource);
   }
}

2,注意点:

不同Spring Boot版本的自动配置类MagicalCorsAutoConfiguration中的@Configuration注解参数不同。Spring Boot 2.1.x以及之前的版本为:

@Configuration

Spring Boot 2.2.x以及之后的版本为

@Configuration(proxyBeanMethods=false)

以上配置项适用于Spring boot 2.0.x 到 2.3.x


目录
相关文章
|
1月前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
58 0
|
2月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
60 4
|
2月前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
47 0
|
9天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
52 14
|
19小时前
|
Java Spring
【Spring配置】创建yml文件和properties或yml文件没有绿叶
本文主要针对,一个项目中怎么创建yml和properties两种不同文件,进行配置,和启动类没有绿叶标识进行解决。
|
6天前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
33 6
|
8天前
|
XML Java 数据格式
🌱 深入Spring的心脏:Bean配置的艺术与实践 🌟
本文深入探讨了Spring框架中Bean配置的奥秘,从基本概念到XML配置文件的使用,再到静态工厂方式实例化Bean的详细步骤,通过实际代码示例帮助读者更好地理解和应用Spring的Bean配置。希望对你的Spring开发之旅有所助益。
52 3
|
2月前
|
Java API Spring
在 Spring 配置文件中配置 Filter 的步骤
【10月更文挑战第21天】在 Spring 配置文件中配置 Filter 是实现请求过滤的重要手段。通过合理的配置,可以灵活地对请求进行处理,满足各种应用需求。还可以根据具体的项目要求和实际情况,进一步深入研究和优化 Filter 的配置,以提高应用的性能和安全性。
|
1月前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
springboot解决js前端跨域问题,javascript跨域问题解决
|
23天前
|
安全 Java 应用服务中间件
SpringBoot:CORS是什么?SpringBoot如何解决跨域问题?
CORS是Web开发中常见且重要的机制,SpringBoot通过提供注解、全局配置和过滤器等多种方式来解决跨域问题。选择适合的方式可以帮助开发者轻松处理跨域请求,提高应用的灵活性和安全性。
52 2