一、Shiro是什麼java
Shiro是功能強大、簡單易用的Java安全框架,核心功能包括:認證、受權、加密以及Session管理。Shiro的應用範圍很普遍,小型移動端應用、大型Web應用以及企業級應用都可以勝任。git
二、Shiro的核心概念github
Subject 主題安全
剛開始看到這個詞時確實有點摸不着頭腦,可是咱們能夠將其簡單理解爲‘the current user',當前正在執行操做的用戶,這樣就好理解多啦!
那怎麼樣才能獲取Subject呢?這個Subject又可以作什麼呢?下面咱們經過一段代碼來了解下bash
// 獲取Subject Subject currentUser = SecurityUtils.getSubject();
SecurityManager架構
SecurityManager是Shiro架構的核心,也是前面咱們介紹的Subject的幕後英雄,經過對象的名稱咱們也能大致猜到SecurtiyManager的做用,那就是管理應用中的全部用戶的安全操做。 框架
通常來講,一個應用只會存在一個SecurityManager實例,也就是屬於應用層面的Sigleton。那麼咱們如何獲取到SecurityManager對象呢?下面經過簡單的Java應用來介紹如何獲取SecurityManagermaven
首先,咱們建立一個maven項目quick-start,在resources目錄下新建一個INI配置文件(爲何是INI配置文件,不是XML或者properties文件呢?Shiro默認是基於INI配置文件的,並且Shiro團隊認爲INI配置文件相比較XML更宜讀,使用起來更簡單,須要的依賴也更少),而後建立一個QuickStart.java
INI配置文件內容以下:ui
#用戶名以及該用戶對應的密碼以及角色 #username = password, role1, role2..., roleN [users] rivers = secret, admin calabash = warrior, guest #角色以及該角色能夠擁有的權限 #rolename = permission1, permission2..., permissionN [roles] admin = UserManagerment:* guest = UserManagerment:getUserInfo
QuickStart部分代碼以下:加密
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini"); SecurityManager manager = factory.getInstance(); SecurityUtils.setSecurityManager(manager);
經過上面代碼咱們看到,首先加載INI配置文件,而後利用工廠模式獲得SecurityManager對象。
Realms
Realm的主要做用就是用來執行認證和受權的邏輯,它其實就至關於Shiro與安全數據(用戶帳號密碼角色權限)之間進行交互的橋樑。當配置Shiro時,咱們必須配置至少一個Realm來進行認證和受權,固然你也能夠配置多個,這也就是爲何咱們這個小節的標題是Realms,而不是Realm的緣由。
可是在上面的示例代碼中,咱們並無配置Realm呀!只是在INI配置文件中,配置了部分用戶以及該用戶對應的角色和權限信息,那應用豈不是會存在問題?Debug發現,咱們上面代碼拿到的SecurityManager對象其實已經存在Realm對象,內容正好是咱們INI配置文件中的內容。
經過上面的圖片咱們能夠看到,Shiro默認給咱們的SecurityManager實際上是DefaultSecurityManager,因爲咱們在INI配置文件中配置了[users]與[roles],Shiro在初始化SecurityManager時自動初始IniRealm對象,並將配置中的[users]與[roles]的值加載進IniRealm對象中。
至此,Shiro的三個核心概念已經介紹完畢。代碼示例下載地址shiro-study