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