背景:
在做前后端分離時,牽扯到跨域,但是已經設置了跨域
前端設置了允許攜帶Cookieaxios.defaults.withCredentials = true;
后端也配置了跨域:
@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { //項目中的所有接口都支持跨域 registry.addMapping("/**") //所有地址都可以訪問,也可以配置具體地址 .allowedOrigins("*") //允許的請求方式 .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE") //是否支持跨域Cookie .allowCredentials(true) // 跨域允許時間 .maxAge(3600); } }
瀏覽器端查看發送的請求,請求頭中包含Authorization

但是在后端攔截器中獲取的參數總是為null


原因:
實際上發送了兩次請求,第一次為OPTIONS請求,第二次才GET/POST...請求
在OPTIONS請求中,不會攜帶請求頭的參數,所以在攔截器上獲取請求頭為空,自定義的攔截器攔截成功
第一次請求不能通過,就不能獲取第二次的請求了GET/POST...
第一次請求不帶參數,第二次請求才帶參數
解決:
在攔截器中,如果請求為OPTIONS請求,則返回true,表示可以正常訪問,然后就會收到真正的GET/POST請求
if (HttpMethod.OPTIONS.toString().equals(request.getMethod())) { System.out.println("OPTIONS請求,放行"); return true; }
