1

我通过使用 Dio 发送请求在 Android 和 Web 上运行完全相同的代码,我看到的是,当我从浏览器发送请求时,我的后端没有得到我自定义添加的标头,但是如果我从模拟器。

我的后端正确设置了 CORS。

Dio dio = Dio();
dio.options.headers[HttpHeaders.authorizationHeader] = "Bearer $token";
final Response response = await dio.get("http://$host:$port/$path", queryParameters: {"searchText": searchQuery, "page": 0, "pageSize": 100});

附加信息

发布请求工作正常,仅获取请求中缺少标头。我使用 http 或 dio 包。

但是,当我注销请求的所有标头时,我可以在服务器日志中看到以下行:

headerName: access-control-request-headers
header: authorization

有没有人见过类似的东西?

4

1 回答 1

1

看来我必须在 spring security 中单独启用 cors 。

     httpSecurity.csrf().disable()
            .cors().and()
            .authorizeRequests()
            .antMatchers("/api/admin/**").hasRole("ADMIN")
            .antMatchers("/api/support/**").hasRole("SUPPORT")
            .antMatchers("/**").permitAll()
.and().exceptionHandling().authenticationEntryPoint(jwtAuthenticationEntryPoint)
.and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)

httpSecurity.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter::class.java)

一旦我这样做了,一切都开始工作了。

总而言之,我在其他地方使用了我的自定义标头,这些标头由我的全局处理,CorsFilter但与 spring-security 相关的标头Authorization由 spring-security 处理,因此无论我添加Authorization到我的 globalCorsFilter或不是。

于 2020-03-07T21:07:46.927 回答