文章目录
- 一、起因
- 二、解决方法
一、起因
使用了gateway
微服务作为整体的网关,并且整合了Spring Security6
;还有一个system微服务,作为被请求的资源,当浏览器向gateway
发送请求,请求system
资源时,遇到CORS
问题。
于是我在system
对应的controller
上加了@CrossOrigin
,无效;配置Web服务器托管网MvcConfigurer
,也无效。
后来发现,会不会是gateway
的spring security6
在一开始就拦截了CORS
跨域请求,导致根本走不到后面的system
配置。
查询了一波服务器托管网,果然如此。这里记录解决方法。
二、解决方法
这是依赖
dependency>
groupId>org.springframework.bootgroupId>
artifactId>spring-boot-starter-oauth2-resource-serverartifactId>
dependency>
dependency>
groupId>org.springframework.bootgroupId>
artifactId>spring-boot-starter-securityartifactId>
dependency>
这是配置
@EnableWebFluxSecurity
@Configuration
public class SecurityConfig {
//安全拦截配置
@Bean
public SecurityWebFilterChain webFluxSecurityFilterChain(ServerHttpSecurity http) throws Exception {
return http
.cors(cors -> cors.configurationSource(corsConfigurationSource()))
.authorizeExchange(exchanges ->
exchanges
.pathMatchers("/**").permitAll()
.anyExchange().authenticated()
)
.oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults()))
.csrf(ServerHttpSecurity.CsrfSpec::disable)
.build();
}
@Bean
public CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration corsConfig = new CorsConfiguration();
corsConfig.addAllowedOriginPattern("*"); // 允许任何源
corsConfig.addAllowedMethod("*"); // 允许任何HTTP方法
corsConfig.addAllowedHeader("*"); // 允许任何HTTP头
corsConfig.setAllowCredentials(true); // 允许证书(cookies)
corsConfig.setMaxAge(3600L); // 预检请求的缓存时间(秒)
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", corsConfig); // 对所有路径应用这个配置
return source;
}
}
需要注意的是,在gateway
的spring security
中处理了CORS
问题后,后续的system
什么的,就不需要再二次处理了。因为CORS
是一个浏览器的策略,只要处理一次,告诉浏览器我允许跨域,浏览器收到后就不再阻拦请求了。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
1.同步获取短视频 1.只要播放地址对Json数据解析,先把列表找出: 2.只想要所有的播放地址,通过列表表达式循环遍历这个列表拿到每个对象,再从一个个对象里面找到Video,再从Video里面找到播放地址(play_addr),再从播放地址找到播放列表(ur…