前后端分離,SpringBoot攔截器中,獲取的請求頭token為NULL問題解決


背景:

在做前后端分離時,牽扯到跨域,但是已經設置了跨域
前端設置了允許攜帶Cookie
axios.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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM