loadUserByUsername無法獲取到引數的可能情況

2020-10-25 10:01:55

一. 請求傳的引數名稱錯誤,且沒有設定usernameParameter

比如登陸的時候向後端發起請求,使用者名稱的引數名稱是name或者nickname,並且沒有設定.usernameParameter()的話,後端是獲取不到值的。

解決方法

1.將請求引數名改為username
2.在config中設定.usernameParameter(「引數名」)

比如.usernameParameter(「name」)
.usernameParameter(「nickname」)

二. security的config裡面設定了.formLogin(),卻沒有使用表單提交

比如使用axios進行post請求提交。
解決方法

1.改為表單提交
2.偽造表單提交

// 2.1: 轉換請求資料格式
let data = this.trans(this.user);
axios.post(url,data,{
    // 2.2: 新增這個請求頭
    headers: {
        'Content-Type':'application/x-www-form-urlencoded'
    }
})


//轉換請求資料格式方法
trans:function(user){
    let url = "";
    for (let k in user) {
        let value = user[k] !== undefined ? user[k] : "";
        url += `&${k}=${encodeURIComponent(value)}`;
    }
    return url ? url.substring(1):"";
}