1. 程式人生 > >Shiro學習筆記(二)--- IniRealm

Shiro學習筆記(二)--- IniRealm

一、簡介

    不同於上一章的simpleRealm,這一章用的是iniRealm。區別在於iniRealm是讀取於配置檔案xxx.ini 來獲取使用者資訊,角色資訊和許可權資訊。

二、配置檔案

idea中,可以把配置檔案放在resource下

ini檔案遇到":"或者"=", 會作為一對key value來處理

user.ini檔案的定義格式為:[users] 使用者名稱=密碼,角色 [roles] 角色=許可權名(例子:amdin=user:delete,user:update)

[users]
admin=123456,admin,user
[roles]
admin=user:delete

三、測試程式碼

程式碼整體跟上一章差別不大,少了@Before部分的使用者初始化(換成了讀取配置檔案)

public class IniRealmTests {

    @Test
    public void contextLoads() {
        // 讀取配置檔案
        IniRealm iniRealm = new IniRealm("classpath:user.ini");
        // 構建DefaultSecurityManager
        DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
        // 設定Realm
        defaultSecurityManager.setRealm(iniRealm);
        // 設定構建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("user");

        subject.checkPermissions("user:delete");
    }
}