<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Shiro 之使用

          共 2645字,需瀏覽 6分鐘

           ·

          2021-12-16 21:15

          一、shiro概述

          • shiro 是一個(gè)功能強(qiáng)大且易于使用的Java安全框架.

          • shiro官網(wǎng):http://shiro.apache.org/

          • Github地址:https://github.com/apache/shiro

          • shiro官方架構(gòu)圖

          a78897af9787b080111f2857628ff8bd.webp

          二、主要名詞解析

          • Subject
            subject記錄了當(dāng)前操作用戶,將用戶的概念理解為當(dāng)前操作的主體

          • SecurityManager
            SecurityManager即安全管理器,對全部的subject進(jìn)行安全管理,它是shiro的核心,負(fù)責(zé)對所有的subject進(jìn)行安全管理。

          • Authenticator
            Authenticator即認(rèn)證器,對用戶身份進(jìn)行認(rèn)證,Authenticator是一個(gè)接口,shiro提供ModularRealmAuthenticator實(shí)現(xiàn)類,也可以自定義認(rèn)證器。

          • Authorizer
            用戶通過認(rèn)證器認(rèn)證通過,在訪問功能時(shí)需要通過授權(quán)器判斷用戶是否有此功能的操作權(quán)限。

          • Realm
            securityManager進(jìn)行安全認(rèn)證需要通過Realm獲取用戶權(quán)限數(shù)據(jù)

          • SessionManager
            shiro框架定義了一套會話管理,它不依賴web容器的session

          • SessionDAO
            是對session會話操作的一套接口

          • CacheManager
            將用戶權(quán)限數(shù)據(jù)存儲在緩存,這樣可以提高性能

          • Cryptography
            shiro提供了一套加密/解密的組件,方便開發(fā)。比如提供常用的散列、加/解密等功能。

          三、十分鐘快速入門

          • 簡單的運(yùn)行一個(gè)dmeo

          一、導(dǎo)入maven依賴

          <dependency>
          ????<groupId>org.apache.shirogroupId>

          ????<artifactId>shiro-coreartifactId>
          ????<version>1.7.1version>
          dependency>

          二、通過.ini 文件初始化一個(gè)Realm

          • 配置文件:名稱隨意,以?.ini?結(jié)尾,放在?resources?目錄下

          [users]
          admin=admin321
          lilei=lilei321

          三、運(yùn)行代碼

          package?com.live.shiro;

          import?org.apache.shiro.SecurityUtils;
          import?org.apache.shiro.authc.AuthenticationException;
          import?org.apache.shiro.authc.IncorrectCredentialsException;
          import?org.apache.shiro.authc.UnknownAccountException;
          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;

          public?class?QuickstartShiro?{
          ????public?static?void?main(String[]?args)?{
          ????????//?創(chuàng)建默認(rèn)的安全管理器
          ????????DefaultSecurityManager?securityManager?=?new?DefaultSecurityManager();
          ????????//?通過.ini文件創(chuàng)建給安全管理器設(shè)置默認(rèn)的Realm
          ????????securityManager.setRealm(new?IniRealm("classpath:shiro-config.ini"));
          ????????//?全局安全工具類,設(shè)置安全管理器進(jìn)行認(rèn)證
          ????????SecurityUtils.setSecurityManager(securityManager);
          ????????//?創(chuàng)建令牌
          ????????UsernamePasswordToken?token?=?new?UsernamePasswordToken("admin",?"admin321");
          ????????//?得到當(dāng)前的?subject,也就是當(dāng)前的用戶
          ????????Subject?subject?=?SecurityUtils.getSubject();
          ????????try{
          ????????????//?打印是否授權(quán)
          ????????????System.out.println(subject.isAuthenticated());
          ????????????//?用戶登陸認(rèn)證
          ????????????subject.login(token);
          ????????????//?true?登陸之后就是授權(quán)
          ????????????System.out.println(subject.isAuthenticated());
          ????????}catch?(UnknownAccountException?e){
          ????????????System.out.println("用戶不存在");
          ????????}catch?(IncorrectCredentialsException?e){
          ????????????System.out.println("密碼錯(cuò)誤");
          ????????}catch?(AuthenticationException?e){
          ????????????System.out.println("認(rèn)證失敗");
          ????????????e.printStackTrace();
          ????????}

          ????}
          }
          • 運(yùn)行發(fā)現(xiàn)執(zhí)行subject.login(token)?之后,認(rèn)證成功了。

          • 所以我們在subject.login(token)通過debug進(jìn)入到里面的實(shí)現(xiàn)

          • 調(diào)用到DelegatingSubject.login()->?DefaultSecurityManager.login()…->AuthenticatingRealm.doGetAuthenticationInfo()->SimpleAccountRealm.doGetAuthenticationInfo()

          • 也就是最終調(diào)用的認(rèn)證就是doGetAuthenticationInfo()方法。

          source:?//rstyro.github.io/blog/2020/04/18/shiro之使用
          555141a5890950c45de439e31db1a8cf.webp

          喜歡,在看

          瀏覽 38
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  北条麻妃中文字幕一区 | 国产精品美女视频 | 国内毛片毛片毛片毛片毛片毛片 | 犬香蕉国产 | 青青草丝袜视频 |