gpt4 book ai didi

spring 5 webflux 功能端点请求中没有访问控制源 header

转载 作者:搜寻专家 更新时间:2023-10-30 22:57:50 25 4
gpt4 key购买 nike

我检查了很多资源,试图为我的问题找到正确的解决方案。从我的 Angular 来看,我认为我已准备好所需的一切,但我无法弄清楚问题出在哪里。

我正在使用 spring 5WebFlux 以及 functional endpoints

当我从我的 vuejs 前端发送 GET 请求时,我得到了这个:

无法加载 http://localhost:8080/test:请求的资源上不存在“Access-Control-Allow-Origin” header 。因此不允许访问源“http://localhost:8081”。响应具有 HTTP 状态代码 401。

请求如下:


选项/test HTTP/1.1
主机:本地主机:8080
连接:保持事件状态
Pragma:无缓存
缓存控制:无缓存
访问控制请求方法:GET
来源:http://localhost:8081
用户代理:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
访问控制请求 header :授权
接受: */*
接受编码:gzip、deflate、br
接受语言:en-US,en;q=0.9,ro;q=0.8

我的 Spring 安全配置

  @Bean
public SecurityWebFilterChain securityWebFilterChain(
ServerHttpSecurity http) {
return http
.authorizeExchange()
.pathMatchers("/users/authenticate").permitAll()
.anyExchange()
.authenticated()
.and()
.httpBasic()
.and()
.build();
}

我尝试了几种不同的方法,这是最后两种:

1.

  private static final List<String> ALLOWED_HEADERS = Arrays.asList(
"x-requested-with",
"authorization",
"Content-Type",
"Authorization",
"credential",
"X-XSRF-TOKEN",
"Access-Control-Allow-Origin",
"Access-Control-Allow-Methods",
"Access-Control-Allow-Headers",
"Access-Control-Max-Age",
"Access-Control-Request-Headers",
"Access-Control-Request-Method");
private static final List<String> ALLOWED_METHODS = Arrays.asList("GET", "PUT", "POST", "DELETE", "OPTIONS");
private static final String ALLOWED_ORIGIN = "*";
private static final String MAX_AGE = "3600";

@Bean
CorsWebFilter corsWebFilter() {
CorsConfiguration corsConfig = new CorsConfiguration();
corsConfig.setAllowedOrigins(Collections.singletonList(ALLOWED_ORIGIN));
corsConfig.setMaxAge(Long.valueOf(MAX_AGE));
corsConfig.setAllowedMethods(ALLOWED_METHODS);
corsConfig.setAllowedHeaders(ALLOWED_HEADERS);

UrlBasedCorsConfigurationSource source =
new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", corsConfig);

return new CorsWebFilter(source);
}

2.

@Configuration
public class WebFluxSecurity implements WebFluxConfigurer {

@Override
public void addCorsMappings(CorsRegistry registry) {

registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.allowedHeaders("*")
.exposedHeaders("Access-Control-Allow-Origin",
"Access-Control-Allow-Methods",
"Access-Control-Allow-Headers",
"Access-Control-Max-Age",
"Access-Control-Request-Headers",
"Access-Control-Request-Method")
.maxAge(3600);

// Add more mappings...
}
}

为什么这不起作用?

最佳答案

看来问题实际上不是cors配置。

与此同时,我采用了一些不同的东西。

  @Bean
public SecurityWebFilterChain securityWebFilterChain(
ServerHttpSecurity http) {
return http
.authorizeExchange()
.pathMatchers(HttpMethod.OPTIONS).permitAll()
.anyExchange()
.authenticated()
.and()
.httpBasic()
.and()
.build();
}

问题出在spring security配置上。我只允许对 /users/authenticate 的所有请求,而不是允许所有 OPTIONS 方法。

我当前的 cors 配置是:

  @Bean
CorsWebFilter corsFilter() {

CorsConfiguration config = new CorsConfiguration();

config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");

UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);

return new CorsWebFilter(source);
}

关于spring 5 webflux 功能端点请求中没有访问控制源 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52689374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com