shiro多Realm第一次呼叫不生效問題

2021-09-08 23:02:39 字數 1410 閱讀 3611

1. 由於最近自己寫的乙個專案上用到了多realm的使用,遇到了乙個這樣的問題:

1. 自己繼承了basichttpauthenticationfilter,實現了獲取token,然後直接請求api的方法,但是每次第一次呼叫的時候都是無效的,第二次請求又是正常的。

以下為配置檔案

@bean

public shirofilte***ctorybean shirfilter(org.apache.shiro.mgt.securitymanager securitymanager)

2. 貼出主要的配置檔案

2.分析問題:

1. 由於第一次不正常,第二次正常,又因為shiro的許可權認證是根據sessionid+過濾器實現的,每次刪除sessionid的cookie後,第一次通過token方式進行請求都會出現沒有許可權的問題。

2. 檢查headerhttpauthenticationfilter類發現正常,在該類中打斷點,發現方法能夠正常進入到該方法中,並且是正常的

3. 查詢shiro中的filter呼叫鏈,發現proxiedfilterchain類中是這樣進行呼叫的

public void dofilter(servletrequest request, servletresponse response) throws ioexception, servletexception 

((filter)this.filters.get(this.index++)).dofilter(request, response, this);

} else

this.orig.dofilter(request, response);}}

獲取filters然後進行乙個乙個呼叫,查詢以及跟蹤斷點發現,authc該方式中對應的為basichttpauthenticationfilter

在basichttpauthenticationfilter打上斷點

發現每次會請求到該方法上,查詢原因發現,由於我是token請求,並沒有帶該引數導致的

問題解決:

1. 檢視shiroconfig類中發現

filterchaindefinitionmap.put("/**", "authc,token");
位置放置許可權filter鑑權有問題,由於token的鑑權會比authc的許可權高,自定義許可權比普通的表單認證的優先順序高。所以應該將其放到前面,修改為如下

filterchaindefinitionmap.put("/**", "token,authc");
2. 重啟專案,執行正常了

第一次飛行

開始敲下這段話時,窗外下面正是一片片陽光照耀著的白雲,伴隨著張學友的歌聲,心潮起伏.雖然從初中起,我就經常乙個人坐著火車,汽車東奔西跑,坐飛機卻是第一次.早上上飛機前,心裡忐忑,必竟還是踏在陸地上踏實.但上了飛機後注意力就放在其它地方上去了,而且,運氣好的是我有乙個靠窗的位置.飛機準備起飛了,助跑加...

第一次面試

話說3月4號學院召開實習動員大會並有三家公司過來進行宣講會,分別是國家體育總局亞運專案組,金蝶和華際友天,由此開始了實習生涯。周五的傍晚,正吃著飯的時候突然收到簡訊通知,金蝶週六上午10點有個面試。當晚就瀏覽著些簡歷製作相關的網頁,為第二天做準備,總以為,簡歷弄得可以了,然後每太留意去完善 後來才知...

第一次哭泣

第一次來到南方 沒有朋友 沒有親人 乙個從沒有出過門的乙個女孩子 為了工作 學習c 在這碰到了乙個很好的老師 當老師控制我的機器時 或者給我講題時 我都是很感動的 幾乎是每天都有問題 形成了依賴 以前他說不要一有問題就舉手問 我依然問 就算我不問他也會控制我的機器 看看我在做什麼 或者有什麼錯誤 現...