最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?shiro安全框架使用介紹

 更新時間:2022年08月25日 14:50:34   作者:青檸果  
安全管理是軟件系統(tǒng)必不可少的的功能。根據(jù)經(jīng)典的“墨菲定律”——凡是可能,總會發(fā)生。如果系統(tǒng)存在安全隱患,最終必然會出現(xiàn)問題,這篇文章主要介紹了SpringBoot安全管理Shiro框架的使用

1.shiro安全框架

Apache Shiro 是一個強(qiáng)大易用的 Java 安全框架,提供了認(rèn)證、授權(quán)、加密和session會話管理等功能,對于任何一個應(yīng)用程序,Shiro 都可以提供全面的安全管理服務(wù)。并且相對于其他安全框架spring security,Shiro 要簡單的多。

Shiro是apache旗下一個開源框架,它將軟件系統(tǒng)的安全認(rèn)證相關(guān)的功能抽取出來,實現(xiàn)用戶身份認(rèn)證,權(quán)限授權(quán)、加密、會話管理等功能,組成了一個通用的安全認(rèn)證框架。

Shiro可以非常容易的開發(fā)出足夠好的應(yīng)用,其不僅可以用在JavaSE環(huán)境,也可以用在JavaEE環(huán)境。Shiro可以幫助我們完成:認(rèn)證、授權(quán)、加密、會話管理、與Web集成、緩存等。

1.1 什么是權(quán)限管理

基本上涉及到用戶參與的系統(tǒng)都要進(jìn)行權(quán)限管理,權(quán)限管理屬于系統(tǒng)安全的范疇,權(quán)限管理實現(xiàn)對用戶訪問系統(tǒng)的控制,按照安全規(guī)則或者安全策略控制用戶可以訪問而且只能訪問自己被授權(quán)的資源。

權(quán)限管理包括用戶身份認(rèn)證和授權(quán)兩部分,簡稱認(rèn)證授權(quán)。對于需要訪問控制的資源用戶首先經(jīng)過身份認(rèn)證,認(rèn)證通過后用戶具有該資源的訪問權(quán)限方可訪問。

1.2 什么是身份認(rèn)證

身份認(rèn)證,就是判斷一個用戶是否為合法用戶的處理過程。最常用的簡單身份認(rèn)證方式是系統(tǒng)通過核對用戶輸入的用戶名和口令,看其是否與系統(tǒng)中存儲的該用戶的用戶名和口令一致,來判斷用戶身份是否正確。對于采用指紋等系統(tǒng),則出示指紋;對于硬件Key等刷卡系統(tǒng),則需要刷卡。

1.3 什么是授權(quán)

授權(quán),即訪問控制,控制誰能訪問哪些資源。主體進(jìn)行身份認(rèn)證后需要分配權(quán)限方可訪問系統(tǒng)的資源,對于某些資源沒有權(quán)限是無法訪問的 .

1.4 認(rèn)證授權(quán)框架有哪些

shiro框架和spring security框架 這款框架是現(xiàn)在市面比較流行。

2.使用shiro完成認(rèn)證工作

2.1 shiro中認(rèn)證的關(guān)鍵對象

Subject:主體訪問系統(tǒng)的用戶,主體可以是用戶、程序等,進(jìn)行認(rèn)證的都稱為主體;

Principal:身份信息----賬號是主體(subject)進(jìn)行身份認(rèn)證的標(biāo)識,標(biāo)識必須具有唯一性,如用戶名、手機(jī)號、郵箱地址等,一個主體可以有多個身份,但是必須有一個主身份(Primary Principal)。

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

2.2 認(rèn)證流程

2.3 項目代碼

1.先不用數(shù)據(jù)庫來進(jìn)行身份認(rèn)證,--我們ini文件,window系統(tǒng)文件,該文件中可以存放賬號和密碼。

(1) 創(chuàng)建一個maven java工程

2.3.1 依賴

 <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>1.9.0</version>
        </dependency>

2.3.2 創(chuàng)建ini文件

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。設(shè)置securityManager的realm
        securityManager.setRealm(iniRealm);
        //4.設(shè)置securityManager上下文生效
        SecurityUtils.setSecurityManager(securityManager);
        //5.獲取subject的主體對象
        Subject subject=SecurityUtils.getSubject();
        try{
            //UsernamePasswordToken作用是封裝你輸入的賬號和密碼 是客戶自己輸入的 用來進(jìn)行比較與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 認(rèn)證的原理

Subject: 主題 登錄信息提交給SecurityManager --->認(rèn)證器Authenticator---->根據(jù)你的realm提供的數(shù)據(jù)進(jìn)行相關(guān)的認(rèn)證。 realm---與數(shù)據(jù)源交互的類。

3.授權(quán)

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。設(shè)置securityManager的realm
        securityManager.setRealm(iniRealm);
        //4.設(shè)置securityManager上下文生效
        SecurityUtils.setSecurityManager(securityManager);
        //5.獲取subject的主體對象
        Subject subject=SecurityUtils.getSubject();
        try{
            //UsernamePasswordToken作用是封裝你輸入的賬號和密碼 是客戶自己輸入的 用來進(jìn)行比較與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){
            //判斷當(dāng)前登錄者是否具有user:query權(quán)限
            boolean permitted = subject.isPermitted("user:update");
            System.out.println(permitted);
            //從角色角度
            boolean role1 = subject.hasRole("role1");
            System.out.println(role1);
        }else {
            System.out.println("請先認(rèn)證");
        }
    }
}

到此這篇關(guān)于Java shiro安全框架使用介紹的文章就介紹到這了,更多相關(guān)Java shiro安全框架內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java?精煉解讀數(shù)據(jù)結(jié)構(gòu)的鏈表的概念與實現(xiàn)

    Java?精煉解讀數(shù)據(jù)結(jié)構(gòu)的鏈表的概念與實現(xiàn)

    鏈表是一種物理存儲單元上非連續(xù)、非順序的存儲結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過鏈表中的指針連接次序?qū)崿F(xiàn)的,每一個鏈表都包含多個節(jié)點,節(jié)點又包含兩個部分,一個是數(shù)據(jù)域,一個是引用域
    2022-03-03
  • 基于java Files類和Paths類的用法(詳解)

    基于java Files類和Paths類的用法(詳解)

    下面小編就為大家分享一篇基于java Files類和Paths類的用法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11
  • Java實現(xiàn)給Word文件添加文字水印

    Java實現(xiàn)給Word文件添加文字水印

    Word中設(shè)置水印時,可預(yù)設(shè)的文字或自定義文字設(shè)置為水印效果,但通常添加水印效果時,會對所有頁面都設(shè)置成統(tǒng)一效果。本文將利用Java給Word每一頁設(shè)置不同文字水印效果,需要的可以參考一下
    2022-02-02
  • 詳解Spring Security如何在權(quán)限中使用通配符

    詳解Spring Security如何在權(quán)限中使用通配符

    小伙伴們知道,在Shiro中,默認(rèn)是支持權(quán)限通配符的?,F(xiàn)在給用戶授權(quán)的時候,可以一個權(quán)限一個權(quán)限的配置,也可以直接用通配符。本文將介紹Spring Security如何在權(quán)限中使用通配符,需要的可以參考一下
    2022-06-06
  • Java中二叉樹的先序、中序、后序遍歷以及代碼實現(xiàn)

    Java中二叉樹的先序、中序、后序遍歷以及代碼實現(xiàn)

    這篇文章主要介紹了Java中二叉樹的先序、中序、后序遍歷以及代碼實現(xiàn),一棵二叉樹是結(jié)點的一個有限集合,該集合或者為空,或者是由一個根節(jié)點加上兩棵別稱為左子樹和右子樹的二叉樹組成,需要的朋友可以參考下
    2023-11-11
  • IDEA創(chuàng)建Maven工程Servlet的詳細(xì)教程

    IDEA創(chuàng)建Maven工程Servlet的詳細(xì)教程

    這篇文章主要介紹了IDEA創(chuàng)建Maven工程Servlet的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • 聊聊Java 中的線程中斷

    聊聊Java 中的線程中斷

    這篇文章主要介紹了Java 中的線程中斷的相關(guān)資料,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-11-11
  • Springboot項目快速實現(xiàn)Aop功能

    Springboot項目快速實現(xiàn)Aop功能

    這篇文章主要介紹了Springboot項目如何快速實現(xiàn)Aop功能,對此方面感興趣的小伙伴可以詳細(xì)參考閱讀本文,本文有一定的參考價值
    2023-03-03
  • Java中的多種文件上傳方式總結(jié)

    Java中的多種文件上傳方式總結(jié)

    這篇文章主要介紹了Java中的多種文件上傳方式總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 詳解JAVA Stream流

    詳解JAVA Stream流

    這篇文章主要介紹了JAVA Stream流的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07

最新評論

临江市| 湖州市| 龙陵县| 鹿邑县| 天柱县| 镇坪县| 陵川县| 临桂县| 临武县| 台前县| 广元市| 安陆市| 成武县| 将乐县| 余干县| 邵阳市| 荣成市| 卓资县| 越西县| 宁乡县| 平陆县| 隆子县| 正阳县| 林州市| 通辽市| 象州县| 朝阳县| 独山县| 湖州市| 昌黎县| 昭觉县| 太仓市| 安塞县| 东明县| 新兴县| 永清县| 闸北区| 团风县| 花垣县| 金堂县| 浮山县|