springboot+shrio簡易登錄登出和用戶權限認證。


源碼:https://github.com/huangshengz/myJavaDemo
本例子參考:https://www.cnblogs.com/HowieYuan/p/9259638.html

本例子驗證主要有兩個類,一個是自定義的攔截類ShiroConfig,在這里我們自定義了很多需要的操作。
例如:角色權限路徑,登錄路徑等,一些具體的含義如下:
* anon:無參,開放權限,可以理解為匿名用戶或游客
* logout:無參,注銷,執行后會直接跳轉到shiroFilterFactoryBean.setLoginUrl(); 設置的 url
* authc:無參,需要認證
* authcBasic:無參,表示 httpBasic 認證
* user:無參,表示必須存在用戶,當登入操作時不做檢查
* ssl:無參,表示安全的URL請求,協議為 https
* perms[user]:參數可寫多個,表示需要某個或某些權限才能通過,多個參數時寫 perms["user, admin"],當有多個參數時必須每個參數都通過才算通過
* roles[admin]:參數可寫多個,表示是某個或某些角色才能通過,多個參數時寫 roles["admin,user"],當有多個參數時必須每個參數都通過才算通過
* rest[user]:根據請求的方法,相當於 perms[user:method],其中 method 為 post,get,delete 等
* port[8081]:當請求的URL端口不是8081時,跳轉到schemal://serverName:8081?queryString 其中 schmal 是協議 http 或 https 等等,
* serverName 是你訪問的 Host,8081 是 Port 端口,queryString 是你訪問的 URL 里的 ? 后面的參數

第二個類是CustomRealm。它繼承了AuthorizingRealm類並且重寫了登錄驗證和權限驗證。在里面我們可以自定義我們的業務邏輯。這個類非常重要,
因為在攔截類ShiroConfig里,securityManager.setRealm(),就是把這個類注入進去,使得攔截能知道用戶信息。
這個類doGetAuthenticationInfo 和 doGetAuthorizationInfo一定要區分明白,第一個是身份認證,例如登錄時就是它,而第二個是角色權限認證,
在里面我們設置了角色權限。

在登錄方法里,很明確的把用戶信息放入到了UsernamePasswordToken里,而doGetAuthenticationInfo進行身份認證時,用戶信息就從UsernamePasswordToken取。

最后說一下整個流程:
1. 項目啟動時,Shiro攔截器工廠類ShiroConfig已經成功的注入。
2. 然后我們登錄的時候,跳轉到login方法里,數據會保存到UsernamePasswordToken里面,主要是用戶名和用戶密碼。
3. 然后就走到了CustomRealm類了的身份證方法doGetAuthenticationInfo,在這里,我們根據用戶名從數據庫里拿到了用戶密碼
與登錄密碼做比較,然后判斷密碼是否正確,然后放行,到此用戶登錄成功。
4. 然后用戶訪問數據的時候,會調用CustomRealm的doGetAuthorizationInfo進行權限認證。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM