shiro許可權不生效原因分析

2021-08-13 17:29:18 字數 1027 閱讀 4289

許可權標籤定義如下:

標籤定義

頁面一頁面二

第一層級

one:view

two:view

第二層級

one:page1:view

two:page2:view

第三層級

one:page1:view:add

two:page2:view:add

開始懷疑是資料庫沒有錄入,檢視後許可權標籤與角色已對應,排除。

後面懷疑是頁面問題,後面把第三層級標籤與第一二層級同一頁面,依然不起作用,排除。

後面懷疑是許可權標籤定義問題,把第三層級標籤改為one:page1:data:add,奇蹟出現,許可權生效。證實許可權標籤定義出了問題。

##問題原因:許可權標籤定義問題

但是後來想想為什麼會出現這種問題,每個標籤都是獨一無二的,對此我對shiro對於許可權標籤的校驗產生了興趣,檢視原始碼,一路debug後最終在org.apache.shiro.authz.permission中看到了關鍵所在,核心**如下

、、、//當這個方法返回true時說明有此許可權

//這個p是代表當前迴圈匹配到的許可權標籤

public boolean implies(permission p)

wildcardpermission wp = (wildcardpermission) p;

//把當前標籤轉分割成乙個set集合(如one:page1:view:add 會分割成[[one], [page1], [view], [add]])

list> otherparts = wp.getparts();

int i = 0;

//迴圈匹配許可權標籤

for (setotherpart : otherparts) else

i++;

}}

##總結:通過分析,我們看到了shiro在定義許可權標籤時,要主意匹配問題,不要存在包含問題,類似aaa 和aaab ,會導致後面標籤失效。

shiro註解不生效(表象)

連續被折磨三天,shiro的 requirespermissions註解就是感覺不到生效,找各種博文 帖子也解決不了,最後逼著對shiro斷點觀察,終於找到問題根源.在網上找資料,一般註解不生效,主要有兩個原因 1 沒有啟用shiro註解功能。而啟用該功能主要有如下兩種方式 使用 使用default...

git ignore不生效原因

有時候我們配置了git ignore 發現不生效,每次提交的時候,有些加入到了ignore的檔案沒有過濾掉,這是因為我們最開始將那些應該過濾的檔案加入到了版本控制。所以解決辦法就是把它們從版本控制移除。我們需要先把本地快取刪除,然後再更新一下ignore檔案。在我們的專案目錄,開啟git bash,...

Cacheable註解不生效原因

cacheable註解中 乙個方法a調同乙個類裡的另乙個有快取註解的方法b,這樣是不走快取的。例如在同乙個service裡面兩個方法的呼叫,快取是不生效的 解決方案 1.不使用註解的方式,直接取 ehcache 的 cachemanger 物件,把需要快取的資料放到裡面,類似於使用 map,快取的邏...