首頁 >Java >java教程 >Java shiro安全框架如何使用

Java shiro安全框架如何使用

王林
王林轉載
2023-05-03 11:22:061355瀏覽

    1.shiro安全框架

    Apache Shiro 是一個強大易用的Java 安全框架,提供了認證、授權、加密和session會話管理等功能,對於任何一個應用程序,Shiro 都可以提供全面的安全管理服務。並且相對於其他安全框架spring security,Shiro 要簡單的多。

    Shiro是apache旗下一個開源框架,它將軟體系統的安全認證相關的功能抽取出來,實現使用者身分認證,權限授權、加密、會話管理等功能,組成了一個通用的安全認證框架。

    Shiro可以非常容易的開發出足夠好的應用,其不僅可以用在JavaSE環境,也可以用在JavaEE環境。 Shiro可以幫助我們完成:認證、授權、加密、會話管理、與Web整合、快取等。

    1.1 什麼是權限管理

    基本上涉及到使用者參與的系統都要進行權限管理,權限管理屬於系統安全的範疇,權限管理實現對使用者存取系統的控制,依照安全規則或安全性原則控制使用者可以存取且只能存取自己被授權的資源。

    權限管理包含使用者身分認證和授權兩部分,簡稱認證授權。對於需要存取控制的資源使用者首先經過身分認證,認證透過後使用者俱有該資源的存取權限方可存取。

    1.2 什麼是身分認證

    身分認證,就是判斷一個使用者是否為合法使用者的處理過程。最常用的簡單身分認證方式是系統透過核對使用者輸入的使用者名稱和口令,看是否與系統中儲存的該使用者的使用者名稱和口令一致,來判斷使用者身分是否正確。對於採用指紋等系統,則出示指紋;硬體Key等刷卡系統,則需要刷卡。

    1.3 什麼是授權

    授權,即存取控制,控制誰能存取哪些資源。主體進行身份認證後需要分配權限方可存取系統的資源,對於某些資源沒有權限是無法存取的.

    1.4 認證授權框架有哪些

    shiro框架和spring security框架這款框架是現在市面比較流行。

    2.使用shiro完成認證工作

    2.1 shiro中認證的關鍵物件

    Subject:主體存取系統的用戶,主體可以是用戶、程式等,進行認證的都稱為主體;

    Principal:身份資訊----帳號是主體(subject)進行身份認證的標識,標識必須具有唯一性,如用戶名、手機號、郵箱地址等,一個主體可以有多個身份,但是必須有一個主身份(Primary Principal)。

    credential:憑證資訊---密碼是只有主體自己知道的安全訊息,如密碼、憑證等。

    2.2 認證流程

    Java shiro安全框架如何使用

    2.3 專案程式碼

    1.先不用資料庫來進行身分認證,--我們ini文件,window系統文件,該文件中可以存放帳號和密碼。

    (1) 建立一個maven java工程

    2.3.1 依賴
     <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-core</artifactId>
                <version>1.9.0</version>
            </dependency>
    2.3.2 建立ini檔案

    Java shiro安全框架如何使用

    2.3.3 測試程式碼
    public class Test01 {
        public static void main(String[] args) {
            //1.获取SecurityManager对象
            DefaultSecurityManager securityManager=new DefaultSecurityManager();
            //2.读取ini文件
            IniRealm iniRealm=new IniRealm("classpath:shiro.ini");
            //3。设置securityManager的realm
            securityManager.setRealm(iniRealm);
            //4.设置securityManager上下文生效
            SecurityUtils.setSecurityManager(securityManager);
            //5.获取subject的主体对象
            Subject subject=SecurityUtils.getSubject();
            try{
                //UsernamePasswordToken作用是封装你输入的账号和密码 是客户自己输入的 用来进行比较与realm
                UsernamePasswordToken token=new UsernamePasswordToken("admin","123456");
                //抛出异常 比对shiro中realm和自己的对比,如果一致则登录成功,不一致则登录失败
                subject.login(token);
                System.out.println("登陆成功");
            }catch(Exception e){
                e.printStackTrace();
                System.out.println("登陆失败");
            }
        }
    }

    2.4 認證的原則

    Java shiro安全框架如何使用

    Subject: 主題登入資訊提交給SecurityManager --->認證器Authenticator- --->根據你的realm提供的資料進行相關的認證。 realm---與資料來源互動的類別。

    3.授權

    Java shiro安全框架如何使用

    Java shiro安全框架如何使用

    #3.1 修改ini檔

    Java shiro安全框架如何使用

    ########3.1 修改ini檔############ ##3.2 修改程式碼###
    public class Test01 {
        public static void main(String[] args) {
            //1.获取SecurityManager对象
            DefaultSecurityManager securityManager=new DefaultSecurityManager();
            //2.读取ini文件
            IniRealm iniRealm=new IniRealm("classpath:shiro.ini");
            //3。设置securityManager的realm
            securityManager.setRealm(iniRealm);
            //4.设置securityManager上下文生效
            SecurityUtils.setSecurityManager(securityManager);
            //5.获取subject的主体对象
            Subject subject=SecurityUtils.getSubject();
            try{
                //UsernamePasswordToken作用是封装你输入的账号和密码 是客户自己输入的 用来进行比较与realm
                UsernamePasswordToken token=new UsernamePasswordToken("admin","123456");
                //抛出异常 比对shiro中realm和自己的对比,如果一致则登录成功,不一致则登录失败
                subject.login(token);
                System.out.println("登陆成功");
            }catch(Exception e){
                e.printStackTrace();
                System.out.println("登陆失败");
            }
            System.out.println("=========================登陆后===========================");
            boolean authenticated = subject.isAuthenticated();
            if(authenticated){
                //判断当前登录者是否具有user:query权限
                boolean permitted = subject.isPermitted("user:update");
                System.out.println(permitted);
                //从角色角度
                boolean role1 = subject.hasRole("role1");
                System.out.println(role1);
            }else {
                System.out.println("请先认证");
            }
        }
    }

    以上是Java shiro安全框架如何使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述:
    本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除