現在做專案,大多都是前後端分離;許可權控制都是在後台實現,前端使用ajax呼叫後台介面。
但是ajax對介面返回的重定向是沒發處理的,會出現異常(具體錯誤是哪個一時想不起來了);當shiro發現失效後的session時通常會將該請求重定向到loginurl,或者是使用者訪問的某個資源許可權不足時(會重定向到unauthorizedurl),這時ajax請求基本都是出錯的。
修改重定向302為正常返回200shiro預設實現了一些filter,使用不同的filter處理對應的許可權攔截:
/**
* typically accessible in configuration the of the enum constant.
* * @since 1.0
*/public enum defaultfilter
return executelogin(request, response);
} else
//allow them to see the login page ;)
return true;
}} else
if (log.istraceenabled())
//前端ajax請求時requestheader裡面帶一些引數,用於判斷是否是前端的請求
string ajaxheader = req.getheader(shiroconstant.userid);
if (ajaxheader != null || req.getheader("xx") != null) else
return false;}}
}
同理,使用者許可權不足是使用authorizationfilter進行攔截處理的,我們依然可以重寫裡面的onaccessdenied方法,如下:
public class shiroroleauthorizationfilter extends authorizationfilter
//前端ajax請求時requestheader裡面帶一些引數,用於判斷是否是前端的請求
string ajaxheader = req.getheader(shiroconstant.userid);
if (ajaxheader != null || req.getheader("xx") != null)
return super.onaccessdenied(request, response);
}}
這樣,前端ajax請求被shiro攔截後就不會出現返回302重定向的問題了。 前後端分離之許可權驗證
前後端分離之許可權驗證 原理 將登入驗證的請求頭中後端生成的秘鑰 token 接收後儲存在cookie內,在再次請求資料時新增在請求頭中傳送給後端驗證,請求資料。登入ajax scope.aaa function aaa 獲取使用者名稱密碼 ajax 將token轉存在cookie中 success...
Shiro之前後端分離許可權驗證返回302錯誤
shiro和spring整合,在xml檔案中配置如下部分 非全部配置 user login anon authc,perms 使用authc進行許可權控制時,若認證不通過,則shiro缺省會重定向到loginurl路徑,前端請求介面時會出現302錯誤,解決辦法是繼承formauthenticatio...
前後端分離 頁面許可權驗證
前端驗證 登入後 新增登入標識 localstorage.login true inc.js 公共標頭檔案處理,沒有登入 跳轉登入 top.location.href 獲取本地絕對路徑或網域名稱訪問路徑 var href document.location.href var abspath absp...