欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java?shiro安全框架使用介紹

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

1.shiro安全框架

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

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

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

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

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

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

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

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

1.3 什么是授權(quán)

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

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

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

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

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

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

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

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

2.2 認(rèn)證流程

2.3 項(xiàng)目代碼

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

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

2.3.1 依賴(lài)

 <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 測(cè)試代碼

public class Test01 {
    public static void main(String[] args) {
        //1.獲取SecurityManager對(duì)象
        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的主體對(duì)象
        Subject subject=SecurityUtils.getSubject();
        try{
            //UsernamePasswordToken作用是封裝你輸入的賬號(hào)和密碼 是客戶(hù)自己輸入的 用來(lái)進(jìn)行比較與realm
            UsernamePasswordToken token=new UsernamePasswordToken("admin","123456");
            //拋出異常 比對(duì)shiro中realm和自己的對(duì)比,如果一致則登錄成功,不一致則登錄失敗
            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ù)源交互的類(lèi)。

3.授權(quán)

3.1 修改ini文件

3.2 修改代碼

public class Test01 {
    public static void main(String[] args) {
        //1.獲取SecurityManager對(duì)象
        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的主體對(duì)象
        Subject subject=SecurityUtils.getSubject();
        try{
            //UsernamePasswordToken作用是封裝你輸入的賬號(hào)和密碼 是客戶(hù)自己輸入的 用來(lái)進(jìn)行比較與realm
            UsernamePasswordToken token=new UsernamePasswordToken("admin","123456");
            //拋出異常 比對(duì)shiro中realm和自己的對(duì)比,如果一致則登錄成功,不一致則登錄失敗
            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("請(qǐng)先認(rèn)證");
        }
    }
}

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

相關(guān)文章

  • IDEA?code?template配置和參數(shù)方式

    IDEA?code?template配置和參數(shù)方式

    這篇文章主要介紹了IDEA?code?template配置和參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教<BR>
    2024-01-01
  • 淺談Java中replace與replaceAll區(qū)別

    淺談Java中replace與replaceAll區(qū)別

    這篇文章主要介紹了Java中replace與replaceAll區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Java實(shí)現(xiàn)生產(chǎn)者消費(fèi)者問(wèn)題與讀者寫(xiě)者問(wèn)題詳解

    Java實(shí)現(xiàn)生產(chǎn)者消費(fèi)者問(wèn)題與讀者寫(xiě)者問(wèn)題詳解

    這篇文章主要介紹了Java實(shí)現(xiàn)生產(chǎn)者消費(fèi)者問(wèn)題與讀者寫(xiě)者問(wèn)題詳解,小編覺(jué)得挺不錯(cuò)的,這里分享給大家,供需要的親朋好友參考。
    2017-11-11
  • 解決Springboot 2 的@RequestParam接收數(shù)組異常問(wèn)題

    解決Springboot 2 的@RequestParam接收數(shù)組異常問(wèn)題

    這篇文章主要介紹了解決Springboot 2 的@RequestParam接收數(shù)組異常問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • MybatisPlus #{param}和${param}的用法詳解

    MybatisPlus #{param}和${param}的用法詳解

    這篇文章主要介紹了MybatisPlus #{param}和${param}的用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java并發(fā)編程中的synchronized關(guān)鍵字詳細(xì)解讀

    Java并發(fā)編程中的synchronized關(guān)鍵字詳細(xì)解讀

    這篇文章主要介紹了Java并發(fā)編程中的synchronized關(guān)鍵字詳細(xì)解讀,在Java早期版本中,synchronized 屬于 重量級(jí)鎖,效率低下,這是因?yàn)楸O(jiān)視器鎖(monitor)是依賴(lài)于底層的操作系統(tǒng)的Mutex Lock來(lái)實(shí)現(xiàn)的,Java 的線(xiàn)程是映射到操作系統(tǒng)的原生線(xiàn)程之上的,需要的朋友可以參考下
    2023-12-12
  • 詳解Java如何有效避免空指針

    詳解Java如何有效避免空指針

    空指針,也就是NullPointerException 簡(jiǎn)稱(chēng)NPE的,怕一下子寫(xiě)出NPE,部分的伙伴看不懂,索性就改成了空指針,在實(shí)際的開(kāi)發(fā)中,我們最討厭的就是遇到空指針了,業(yè)務(wù)跑著跑著發(fā)現(xiàn)了空指針,所以本文詳細(xì)介紹了Java如何有效的避免空指針,需要的朋友可以參考下
    2023-12-12
  • 使用Spring Cloud Feign作為HTTP客戶(hù)端調(diào)用遠(yuǎn)程HTTP服務(wù)的方法(推薦)

    使用Spring Cloud Feign作為HTTP客戶(hù)端調(diào)用遠(yuǎn)程HTTP服務(wù)的方法(推薦)

    在Spring Cloud中使用Feign, 我們可以做到使用HTTP請(qǐng)求遠(yuǎn)程服務(wù)時(shí)能與調(diào)用本地方法一樣的編碼體驗(yàn),開(kāi)發(fā)者完全感知不到這是遠(yuǎn)程方法,更感知不到這是個(gè)HTTP請(qǐng)求,具體內(nèi)容詳情大家參考下本文
    2018-01-01
  • Java并發(fā)之異步的八種實(shí)現(xiàn)方式

    Java并發(fā)之異步的八種實(shí)現(xiàn)方式

    本文主要介紹了Java并發(fā)之異步的八種實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 由淺入深快速掌握J(rèn)ava?數(shù)組的使用

    由淺入深快速掌握J(rèn)ava?數(shù)組的使用

    Java?數(shù)組?數(shù)組對(duì)于每一門(mén)編程語(yǔ)言來(lái)說(shuō)都是重要的數(shù)據(jù)結(jié)構(gòu)之一,當(dāng)然不同語(yǔ)言對(duì)數(shù)組的實(shí)現(xiàn)及處理也不盡相同。?Java?語(yǔ)言中提供的數(shù)組是用來(lái)存儲(chǔ)固定大小的同類(lèi)型元素
    2022-04-04

最新評(píng)論