1. 程式人生 > >Shiro安全框架第四篇| Shiro自定義Realm進行認證授權

Shiro安全框架第四篇| Shiro自定義Realm進行認證授權

 

SHiro自定義Realm

首先在resource下新建user.ini

1[users]
2jiuyue=12345,admin
3[roles]
4admin=user:delete,user:update

然後測試類下新建IniRealmTest測試類,跟前面不一樣的是需要

1  IniRealm iniRealm =new IniRealm("classpath:user.ini");

new IniRealm物件將自定義的user.ini配置到IniRealm作為引數進行例項化。

 1/**
 2 * Create bySeptember
 3 * 2018/10/25
 4 * 19:51
 5 */
 6public class IniRealmTest {
 7    @Test
 8    public void testAuthentication(){
 9        IniRealm iniRealm =new IniRealm("classpath:user.ini");
10
11        //1.構建SecurityManager環境
12        DefaultSecurityManager defaultSecurityManager= new DefaultSecurityManager();
13        defaultSecurityManager.setRealm(iniRealm);
14        SecurityUtils.setSecurityManager(defaultSecurityManager);
15        Subject subject = SecurityUtils.getSubject();
16        //2.主體提交授權認證
17        UsernamePasswordToken token = new UsernamePasswordToken("jiuyue","12345");
18        subject.login(token);
19        System.out.println("isAuthenticate:"+subject.isAuthenticated());
20        System.out.println("user:");
21        subject.checkRoles("admin");
22        subject.checkPermission("user:delete");
23        subject.checkPermissions("user:delete","user:update");
24
25    }
26}

程式碼分析:
首先通過new DefaultSecurityManager()構建SecurityManager環境,將IniRealm設定到環境中

1( defaultSecurityManager.setRealm(iniRealm))

接著獲取 SecurityManager 並繫結到 SecurityUtils。

通過 SecurityUtils 得到 Subject,其會自動繫結到當前執行緒;如果在 web 環境在請求結束時需要解除繫結。然後獲取身份驗證的 Token,如使用者名稱,密碼。

呼叫 subject.login 方法進行登入,其會自動委託給 SecurityManager.login 方法進行登入。

專題連結:

Shiro安全框架第一篇| 什麼是Apache Shiro?

Shiro安全框架第二篇| Shiro的整體架構

Shiro安全框架第三篇| Shiro的認證,授權

                “掃碼關注“