- Apache Shiro是一個強大且易用的Java安全框架,執行身份驗證、受權、密碼學和會話管理。
- 使用Shiro的易於理解的API,您能夠快速、輕鬆地得到任何應用程序,從最小的移動應用程序到最大的網絡和企業應用程序。
Shiro 主要分爲來個部分就是認證和受權,mysql
- 在我的感受來看就是查詢數據庫作相應的判斷而已,
- Shiro只是一個框架而已,其中的內容須要本身的去構建,先後是本身的,中間是Shiro幫咱們去搭建和配置好的
- 我的認爲須要看一下其中的一些源碼,更有幫助的深刻的去了解Shiro的原理。
Shiro有三大核心組件:sql
Subject:即當前用戶數據庫
- 在權限管理的應用程序裏每每須要知道誰可以操做什麼,誰擁有操做該程序的權利,shiro中則須要經過Subject來提供基礎的當前用戶信息
- 全部的Subject都要綁定到SecurityManager上,與Subject的交互其實是被轉換爲與SecurityManager的交互。
SecurityManager:即全部Subject的管理者安全
- 這是Shiro框架的核心組件,能夠把他看作是一個Shiro框架的全局管理組件,用於調度各類Shiro框架的服務。
- 做用相似於SpringMVC中的DispatcherServlet,用於攔截全部請求並進行處理。
Realm:Realm是用戶的信息認證器和用戶的權限人證器網絡
- 咱們須要本身來實現Realm來自定義的管理咱們本身系統內部的權限規則。
- SecurityManager要驗證用戶,須要從Realm中獲取用戶。
- 能夠把Realm看作是數據源。
編寫shiro配置文件
- 在resources目錄下編寫shiro配置文件,shiro.ini
Shiro+MySQL動態權限驗證
- 在resources文件夾下建立配置文件shiro-mysql.ini:
- 注意sql語句,每次只查詢一個shiro要求查詢的字段,若是寫select *就會報錯了。
- ini配置文件要求必須是key=value的形式,
- 若是有些人沒有設置數據庫的密碼,就不要寫對應的配置。
- 只寫」dataSource.password=」等號右面沒有值會報錯。
其權限過濾器及配置釋義:框架
- anon:
- 例子/admins/**=anon 沒有參數,表示能夠匿名使用。
- authc:
- 例如/admins/user/**=authc表示須要認證(登陸)才能使用,沒有參數
- roles(角色):
- 例子/admins/user/**=roles[admin],參數能夠寫多個,參數之間用逗號分割,當有多個參數時,例如admins/user/**=roles["admin,guest"],每一個參數經過纔算經過,至關於hasAllRoles()方法。
- perms(權限):
- 例子/admins/user/**=perms[add],參數能夠寫多個,例如/admins/user/**=perms["add, modify"],當有多個參數時必須每一個參數都經過才經過,想當於isPermitedAll()方法。
- rest:
- 例子/admins/user/**=rest[user],根據請求的方法,至關於/admins/user/**=perms[user:method] ,其中method爲post,get,delete等。
- port:
- 例子/admins/user/**=port[8081],當請求的url的端口不是8081是跳轉到schemal://serverName:8081?queryString,其中schmal是協議http或https等,serverName是你訪問的host,8081是url配置裏port的端口,queryString是你訪問的url裏的問號(?)後面的參數。
- authcBasic:
- 例如/admins/user/**=authcBasic沒有參數.表示httpBasic認證
- ssl:
- 例子/admins/user/**=ssl沒有參數,表示安全的url請求,協議爲https
- user:
- 例如/admins/user/**=user沒有參數表示必須存在用戶,當登入操做時不作檢查