Apache Shiro 是什麼?html
Apache Shiro 是一個框架,可用於身份驗證和受權web
Apache Shiro 特性算法
a. 身份認證數據庫
b.訪問權限控制(用戶與角色的關係;用戶與操做的關係)apache
c.能夠在任何場合使用會話管理緩存
d.支持SSO微信
e.支持記住密碼(支持跨會話的記住身份信息)框架
f.緩存主要用來進行身份認證和權限控制加密
Shiro 的正常服務能夠單獨被部署,不必定必須依賴特定環境。除了單獨部署使用,也能夠與大多數框架融合使用。spa
關鍵詞釋義
Authentication:認證,也就是驗證用戶的身份,就是肯定你是否是你,好比經過用戶名、密碼的方式驗證,或者某些第三方認證,好比微信認證。
Authorization:受權,也叫訪問控制,也就是看你是否有權限作什麼事情,好比是否有權限看某個文件,或者是否有權限作後臺管理;
Cipher:加密方式,這裏主要有幾種經常使用的加密方式,好比分組密碼(Block Ciphers)、流密碼(Stream Ciphers)、對稱加密(Symmetric Ciphers)、非對稱加密(Asymmetric Ciphers)
Credential:證書,好比密碼、指紋或者網銀的Key都算是證書的一種。系統經過將用戶提供的證書和系統存儲的證書比較,若是一致就認爲用戶的身份是對的;
Hash:哈希,一種單相的數據加密算法;
Persmission:權限,用於描述系統的某項基礎功能,好比 「打開一個文件」,「查看’/user/list/’頁面」,「打印文檔」,這些都算是一種權限;
Principal:身份,就是一種用於標識用戶身份的一種屬性,好比郵箱、電話號碼、用戶名、微信號等;
Realm:這是一個用於訪問應用程序的用戶、角色、權限的組件,能夠把它看作是Shiro的DAO(Data Access Object),用於把各類存儲介質(好比關係數據庫、LDAP、文件)內的用戶權限數據轉換爲Shiro可以理解的格式。
Role:角色,在Shiro中,角色就是權限的組合;
Session:會話,也就是用戶登陸以後的上下文,在用戶登出以前能夠不用傳遞用戶名、密碼就能夠作各類操做;
Subject:起始就是user,可是在Shiro中把它叫作Subject,由於和咱們系統交互的不必定是人,也多是其餘的系統。
重要操做:
獲取當前用戶
Subject user= SecurityUtils.getSubject();
驗證登陸
UsernamePasswordToken token = new UsernamePasswordToken(username, password); Subject subject = SecurityUtils.getSubject(); try { subject.login(token); return R.ok(); } catch (AuthenticationException e) { return R.error("用戶或密碼錯誤"); }
擁有某個角色
currentUser.hasRole(RoleName)
擁有某個權限
currentUser.isPermitted("order:add")
用戶是否有權限訪問某種類型數據的某個具體實例
currentUser.isPermitted("order:get:order2")
幾個簡單的操做基本能夠知足認證和權限兩部分的平常操做
參考 : http://www.cnblogs.com/strinkbug/p/6117353.html
參考: https://www.ibm.com/developerworks/cn/web/wa-apacheshiro/index.html
參考: https://www.infoq.com/articles/apache-shiro