
無狀态認證攔截器
View Code
Subject工廠
注意,這裡禁用了session
無狀态Realm
無狀态Token
shiro配置檔案
這裡禁用了回話排程器的session存儲
web.xml配置
token生成工具類
簡單測試一下
補充Spring中多重屬性指派處理
*加入session,放入redis中(user_name作為key值,token作為hash值,目前登入時間作為value值)
*使用者登入互斥操作:如果互斥,清除redis中該使用者對應的狀态,重新寫入新的狀态;如果不互斥,寫入新的狀态,重新整理key值,并檢測該使用者其他的狀态是否已經逾時(根據key值擷取到所有的 key和hashKey的組合,判斷value[登入時間]+timeout[逾時時間] >= curtime[目前時間]),如果逾時則清除狀态。
*使用esapi進行token的生成
*認證資訊,如果是web端則從cookie中擷取,ajax從header中擷取;如果是移動端也是從header中擷取
session manager邏輯
無狀态認證過濾器
dubbo服務調用時上下文的傳遞問題
思路:認證過濾器中 通過MDC将上下文資訊寫入到InheritableThreadLocal中,寫一個dubbo的過濾器。在過濾器中判斷,如果是消費一方,則将MDC中的上下文取出來放入dubbo的context變量中;如果是服務方,則從dubbo的context中拿出上下文,解析并放入MDC以及InvocationInfoProxy(下面會提到)類中
同樣禁用掉session的建立
這裡使用自定義 session manager去校驗
無狀态token
token處理器
将一些必須字段和擴充字段進行通過esapi 的hash算法進行加密,生成token串,最終的token = token處理器辨別+過期時間+原token
通過InvocationInfoProxy這個類(基于ThreadLocal的),可以拿到使用者相關的參數資訊
還有esapi和cache的相關代碼到項目裡看一下吧