从yml配置文件中读取配置信息:
yml
ly :
cors :
addAllowedOrigin :
- http: //manage.leyou.com
- http: //www.leyou.com
setAllowCredentials : true
addAllowedMethod :
- OPTIONS
- HEAD
- GET
- PUT
- POST
- DELETE
addAllowedHeader :
- "*"
setMaxAge : 3600000
filterPath : "/**"
自定义属性类
package com. leyou. gateway. config ;
import lombok. Data ;
import org. springframework. boot. context. properties. ConfigurationProperties ;
import org. springframework. context. annotation. Configuration ;
import java. util. List ;
@Data
@ConfigurationProperties ( prefix = "ly.cors" )
public class CoresProperties {
private List < String > addAllowedOrigin;
private Boolean setAllowCredentials;
private List < String > addAllowedMethod;
private List < String > addAllowedHeader;
private Long setMaxAge;
private String filterPath;
}
从配置类中读取自定义的属性类
第一种方法:在方法中传入CoresProperties对象(CoresProperties prop)
package com. leyou. gateway. config ;
import org. springframework. boot. context. properties. EnableConfigurationProperties ;
import org. springframework. context. annotation. Bean ;
import org. springframework. context. annotation. Configuration ;
import org. springframework. web. bind. annotation. PutMapping ;
import org. springframework. web. cors. CorsConfiguration ;
import org. springframework. web. cors. CorsConfigurationSource ;
import org. springframework. web. cors. UrlBasedCorsConfigurationSource ;
import org. springframework. web. filter. CorsFilter ;
@Configuration
@EnableConfigurationProperties ( CoresProperties . class )
public class CorsConfig {
@Bean
public CorsFilter corsFilter ( CoresProperties prop) {
CorsConfiguration config = new CorsConfiguration ( ) ;
prop. getAddAllowedOrigin ( ) . forEach ( config:: addAllowedOrigin ) ;
config. setAllowCredentials ( prop. getSetAllowCredentials ( ) ) ;
prop. getAddAllowedMethod ( ) . forEach ( config:: addAllowedMethod ) ;
prop. getAddAllowedHeader ( ) . forEach ( config:: addAllowedHeader ) ;
config. setMaxAge ( prop. getSetMaxAge ( ) ) ;
UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource ( ) ;
configSource. registerCorsConfiguration ( prop. getFilterPath ( ) , config) ;
return new CorsFilter ( configSource) ;
}
}
第二种方法:在类中中注入CoresProperties
package com. leyou. gateway. config ;
import org. springframework. boot. context. properties. EnableConfigurationProperties ;
import org. springframework. context. annotation. Bean ;
import org. springframework. context. annotation. Configuration ;
import org. springframework. web. bind. annotation. PutMapping ;
import org. springframework. web. cors. CorsConfiguration ;
import org. springframework. web. cors. CorsConfigurationSource ;
import org. springframework. web. cors. UrlBasedCorsConfigurationSource ;
import org. springframework. web. filter. CorsFilter ;
@Configuration
public class CorsConfig {
@Autowired
private CoresProperties prop;
@Bean
public CorsFilter corsFilter ( ) {
CorsConfiguration config = new CorsConfiguration ( ) ;
prop. getAddAllowedOrigin ( ) . forEach ( config:: addAllowedOrigin ) ;
config. setAllowCredentials ( prop. getSetAllowCredentials ( ) ) ;
prop. getAddAllowedMethod ( ) . forEach ( config:: addAllowedMethod ) ;
prop. getAddAllowedHeader ( ) . forEach ( config:: addAllowedHeader ) ;
config. setMaxAge ( prop. getSetMaxAge ( ) ) ;
UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource ( ) ;
configSource. registerCorsConfiguration ( prop. getFilterPath ( ) , config) ;
return new CorsFilter ( configSource) ;
}
}
第三种方法:使用@Component
package com. leyou. gateway. config ;
import org. springframework. boot. context. properties. EnableConfigurationProperties ;
import org. springframework. context. annotation. Bean ;
import org. springframework. context. annotation. Configuration ;
import org. springframework. web. bind. annotation. PutMapping ;
import org. springframework. web. cors. CorsConfiguration ;
import org. springframework. web. cors. CorsConfigurationSource ;
import org. springframework. web. cors. UrlBasedCorsConfigurationSource ;
import org. springframework. web. filter. CorsFilter ;
@Configuration
@Component
public class CorsConfig {
@Bean
public CorsFilter corsFilter ( ) {
CorsConfiguration config = new CorsConfiguration ( ) ;
prop. getAddAllowedOrigin ( ) . forEach ( config:: addAllowedOrigin ) ;
config. setAllowCredentials ( prop. getSetAllowCredentials ( ) ) ;
prop. getAddAllowedMethod ( ) . forEach ( config:: addAllowedMethod ) ;
prop. getAddAllowedHeader ( ) . forEach ( config:: addAllowedHeader ) ;
config. setMaxAge ( prop. getSetMaxAge ( ) ) ;
UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource ( ) ;
configSource. registerCorsConfiguration ( prop. getFilterPath ( ) , config) ;
return new CorsFilter ( configSource) ;
}
}