什么叫做認(rèn)證
1.有人覺得 用戶輸入用戶賬號密碼,我去數(shù)據(jù)庫匹配一致,才叫認(rèn)證
2.第二種認(rèn)證是,我出一個token 你匹配我的token是否過期,token解析之后的用戶名是否存在,都可以就認(rèn)證通過,你可以使用我的資源了
我叫第一種 為 賬號密碼認(rèn)證
第二種叫做 token認(rèn)證
我們的jeegc中的shiro認(rèn)證是第二種【token認(rèn)證】
大概shiro流程
1.寫一個過濾器 ,把路徑 /** 都過濾了
2 在過濾器里面觸發(fā)shiro的login(token) 匹配token
3結(jié)果:用戶認(rèn)證成功 用戶認(rèn)證失敗
匹配token邏輯
匹配token邏輯在ShiroRealm#doGetAuthenticationInfo中處理
這里處理 token是否過期,token解析的用戶是否存在的邏輯
注意:沒有密碼配對邏輯,我們的shiro是拿著token干活的,token是在登錄之后生成的
也就是登錄的密碼匹配邏輯,不需要shiro做
注意的點 你發(fā)現(xiàn)shiro沒有處理password
password比對過程留給你的登錄方法去做
shiro一直只拿著你的token比對【是否token過期】,【用戶是否存在】,就是不處理password
也就是在你匹對好密碼之后 生成一個token,shiro只操作你的token
password這這一步不在shiro做 而是自己寫登錄邏輯的時候處理
詳細一點

1定義ShiroConfig //所有的shiro配置都在這里 比如哪些url需要過濾 ,哪些不需要
2定義ShiroRealm //ShiroRealm的 認(rèn)證/授權(quán) 方法都在這里做
3重寫認(rèn)證的token類 我們只需要在認(rèn)證的時候處理token就可以,不需要配對password
4自定義一些過濾器
JwtFilter token過濾器
ResourceCheckFilter //不知道干嘛的 可以放著不學(xué)習(xí)
CustomShiroFilterFactoryBean //不知道干嘛的 可以放著不學(xué)習(xí)
ShiroConfig
ShiroConfig里面有什么東西
#shiroFilter 定義了那些url需要那些過濾器 ,那些不需要過濾器
幾乎所有的/** 需要過濾器 走JwtFilter
JwtFilter過濾器
判斷如果請求帶有token直接觸發(fā) shiro.login(token)方法
shiro.login(token) 不拋異常就能過 這個過濾器
shiro.login(token)觸發(fā)之后,最終其實會觸發(fā)的是 ShiroRealm的#doGetAuthenticationInfo方法
ShiroRealm#doGetAuthenticationInfo方法
doGetAuthenticationInfo方法 中處理了
1.token是否失效
2.token解析出來的username 查詢用戶時候存在
3 如果token認(rèn)證沒問題 觸發(fā)刷新token操作(只要用戶一直使,就延遲token登錄狀態(tài))
客戶使用接口,接口中存在 @RequiresPermissions("sys:user:list")
就會進入 ShiroRealm的#doGetAuthorizationInfo
判斷用戶是否存在權(quán)限
不存在拋異常
感覺自己啰嗦了