Realms充當Shiro與應用程序安全數據之間的橋樑,簡而言之,Shiro從Realms中獲取安全數據(用戶,角色,權限)。Shiro 也爲我麼提供了一些常用的Realm(IniRealm,JdbcRealm)等,這裏我們會介紹IniRealm的使用,這也是Shiro默認使用的Realm,它是從ini文件中獲取用戶,角色,權限。本章先介紹如何使用IniRealm驗證用戶的。至於Realm的原理後續會詳細介紹。
ini文件它可以配置用戶,角色,權限以及Realm等SecurityManager管理的組件。如下所示爲Ini配置文件介紹。
[main]
# 用於配置對象實例以及其屬性
# 比如:securityManager, Realms和一些其他由SecurityManager管理的實例
[users]
# 用於簡單的配置用戶以及其憑證,一般情況下我們都是從數據庫獲取用戶以及憑證
[roles]
# 用於簡單的配置用戶的角色,一般情況下我們都是從數據庫獲取用戶的角色,這部分會在權限控制中講解
[urls]
# 在Web應用中基於URL的安全控制管理配置,這部分在Shiro在web中的使用部分介紹
該部分我們只是用到[users]部分配置,[users]部分允許您定義一組靜態用戶帳戶。這在用戶帳戶數量很少或不需要在運行時動態創建用戶帳戶的環境中非常有用。[users]配置的格式爲:username = password,roleName1,roleName2...roleNameN.
- 等號左側的值爲用戶賬戶
- 右側第一個值爲用戶密碼
- 右側其他的值爲用戶的角色,一個用戶可以配置多個角色
[users]
#賬號 = 密碼
admin = secret
#賬號 = 密碼 , 角色 , 角色 其中角色爲[roles]中配置的角色,此部分不涉及權限
lonestarr = vespa, goodguy, schwartz
如下爲代碼案例:
public class IniRealmAuthentication {
public static void main(String[] args) {
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro-Ini.ini");
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
Subject subject = SecurityUtils.getSubject();
try {
UsernamePasswordToken upt = new UsernamePasswordToken("pharos", "123456");
subject.login(upt);
System.out.println("認證成功");
} catch (AuthenticationException e) {
System.out.println("認證失敗");
}
}
}
[users]
pharos = 123456
wangke = 456789
admin = abcdefg