Flutter Web - 缺少请求 Headers
Flutter Web - Request Headers missing
我 运行 在 Android 和 Web 上使用 Dio 发送请求完全相同的代码,我看到我的后端没有添加我的自定义 headers当我从浏览器发送请求时,但如果我从模拟器执行相同的操作,一切正常。
我的后端正确设置了 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});
附加信息
post 请求工作正常,header 仅在 get 请求中丢失。我要么使用 http 要么 dio 包。
但是,当我注销请求的所有 header 时,我可以在服务器日志中看到以下行:
headerName: access-control-request-headers
header: authorization
有人见过类似的东西吗?
看来我必须在 spring 安全性中单独启用 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)
一旦我这样做了,一切就开始工作了。
综上所述,
我在其他地方使用了我的自定义 headers,这些地方由我的全局 CorsFilter
处理,但是 headers 与 spring-security 相关,例如 Authorization
由 spring-security 处理所以无论我是否将 Authorization
添加到我的全局 CorsFilter
中,也必须在那里启用 cors。
我 运行 在 Android 和 Web 上使用 Dio 发送请求完全相同的代码,我看到我的后端没有添加我的自定义 headers当我从浏览器发送请求时,但如果我从模拟器执行相同的操作,一切正常。
我的后端正确设置了 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});
附加信息
post 请求工作正常,header 仅在 get 请求中丢失。我要么使用 http 要么 dio 包。
但是,当我注销请求的所有 header 时,我可以在服务器日志中看到以下行:
headerName: access-control-request-headers
header: authorization
有人见过类似的东西吗?
看来我必须在 spring 安全性中单独启用 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)
一旦我这样做了,一切就开始工作了。
综上所述,
我在其他地方使用了我的自定义 headers,这些地方由我的全局 CorsFilter
处理,但是 headers 与 spring-security 相关,例如 Authorization
由 spring-security 处理所以无论我是否将 Authorization
添加到我的全局 CorsFilter
中,也必须在那里启用 cors。