天天看點

菜鳥學習shiro之用配置檔案實作登入,身份和權限驗證2

Maven的和第一篇,一樣直接去複制使用

這篇部落格和上一篇沒有多大的差別,差別之處就是上一篇沒有實作權限認證,将在這一篇中實作,這裡我們使用四郎給我們提供的内置類IniRealm,來實作登入,身份和權限驗證,值得注意的是,IniRealm這個是引入的配置檔案的形式來管理資料庫中的資料的

直接上代碼吧:

import antlr.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.realm.text.IniRealm;
import org.apache.shiro.subject.Subject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class IniRealmTest {


    @Test
    public void testAuthenticationTest() {

        // 這個是内置的realm類
        IniRealm iniRealm = new IniRealm("classpath:user.ini");


        // 1.建構SecurityManager環境
        DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
        defaultSecurityManager.setRealm(iniRealm);

        // 2.主體送出認證請求
        SecurityUtils.setSecurityManager(defaultSecurityManager);
        Subject subject = SecurityUtils.getSubject();

        // 這個是需要認證的資訊
        UsernamePasswordToken token = new UsernamePasswordToken("Mark","123456");
        subject.login(token);

        System.out.println("isAuthenticated="+subject.isAuthenticated());

        //subject.logout();

        System.out.println("isAuthenticated="+subject.isAuthenticated());

        subject.checkRole("admin");
        subject.checkPermissions("user:delete","user:update");
    }

}
user.ini的配置檔案如下
           
[users]
Mark=123456,admin
[roles]
admin=user:delete,user:update           

其實總體思路上還是:

1.建構安全管理器的環境,然後

2.就類比如一個伺服器端,境界為資料庫中的使用者的資訊,把域資料庫的使用者資訊加載到安全管理器環境中去

3.統一把資訊部署到主題實作容器或者封裝對象的實作類(主題是安全管理器的實作類)中,

4.用戶端把要驗證的資訊在主題容器中進行比對,這時所有的結果都在學科的方法中檢視。