前後端分離之shiro實現許可權控制的一些問題

2021-08-20 10:48:04 字數 1310 閱讀 8805

現在做專案,大多都是前後端分離;許可權控制都是在後台實現,前端使用ajax呼叫後台介面。

但是ajax對介面返回的重定向是沒發處理的,會出現異常(具體錯誤是哪個一時想不起來了);當shiro發現失效後的session時通常會將該請求重定向到loginurl,或者是使用者訪問的某個資源許可權不足時(會重定向到unauthorizedurl),這時ajax請求基本都是出錯的。

修改重定向302為正常返回200

shiro預設實現了一些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...