Shiro學習筆記(一)--- 認證與授權
阿新 • • 發佈:2018-11-19
一、簡介
Apache Shiro是一個強大且易用的Java安全框架,執行身份驗證、授權、密碼和會話管理。使用Shiro的易於理解的API,您可以快速、輕鬆地獲得任何應用程式,從最小的移動應用程式到最大的網路和企業應用程式。
主要功能
三個核心元件:Subject, SecurityManager 和 Realms.
Subject:即“當前操作使用者”。但是,在Shiro中,Subject這一概念並不僅僅指人,也可以是第三方程序、後臺帳戶(Daemon Account)或其他類似事物。它僅僅意味著“當前跟軟體互動的東西”。但考慮到大多數目的和用途,你可以把它認為是Shiro的“使用者”概念。
Subject代表了當前使用者的安全操作,SecurityManager則管理所有使用者的安全操作。
SecurityManager
Realm: Realm充當了Shiro與應用安全資料間的“橋樑”或者“聯結器”。也就是說,當對使用者執行認證(登入)和授權(訪問控制)驗證時,Shiro會從應用配置的Realm中查詢使用者及其許可權資訊。
從這個意義上講,Realm實質上是一個安全相關的DAO:它封裝了資料來源的連線細節,並在需要時將相關資料提供給Shiro。當配置Shiro時,你必須至少指定一個Realm,用於認證和(或)授權。配置多個Realm是可以的,但是至少需要一個。
Shiro內建了可以連線大量安全資料來源(又名目錄)的Realm,如LDAP、關係資料庫(JDBC)、類似INI的文字配置資源以及屬性檔案等。如果預設的Realm不能滿足需求,你還可以插入代表自定義資料來源的自己的Realm實現。
二、maven引入依賴,pom.xml
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.4.0</version>
</dependency>
三、單元測試編碼
這裡的Realm使用的是simpleRealm,在後面的章節會演示iniRealm,jdbcRealm和自定義的Realm
@RunWith(SpringRunner.class)
@SpringBootTest
public class HqjyShiroApplicationTests {
SimpleAccountRealm simpleAccountRealm = new SimpleAccountRealm();
@Before
public void initUser() {
// 初始化使用者
simpleAccountRealm.addAccount("admin", "123456", "user");
}
@Test
public void contextLoads() {
// 構建DefaultSecurityManager
DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
// 設定Realm
defaultSecurityManager.setRealm(simpleAccountRealm);
// 設定構建DefaultSecurityManager
SecurityUtils.setSecurityManager(defaultSecurityManager);
// 建立驗證物件
UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("admin", "123456");
// 建立subject物件並提交登陸token請求
Subject subject = SecurityUtils.getSubject();
subject.login(usernamePasswordToken);
System.out.println("驗證是否有許可權:" + subject.isAuthenticated());
// 驗證使用者是否有user角色,若沒有改許可權會丟擲 UnauthorizedException 異常
// 同時checkRoles 可以傳多個引數,同時驗證多個角色
subject.checkRoles("user1");
}
}