許可權標籤定義如下:
標籤定義
頁面一頁面二
第一層級
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,快取的邏...