大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 Shiro權(quán)限控制框架

Shiro權(quán)限控制框架

更新時(shí)間:2021-07-29 16:47:56 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1236次

Shiro三個(gè)核心組件:Subject,SecurityManager和Realms.

Subject:即“當(dāng)前操作用發(fā)戶”。但是,在Shiro中,Subject這一概念并不僅僅指人,也可以是第三方進(jìn)程、后臺(tái)帳戶(Daemon Account)或其他類似事物。它僅僅意味著“當(dāng)前跟軟件交互的東西”。但考慮到大多數(shù)目的和用途,你可以把它認(rèn)為是Shiro的“用戶”概念。Subject代表了當(dāng)前用戶的安全操作,SecurityManager則管理所有用戶的安全操作。

SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通過SecurityManager來管理內(nèi)部組件實(shí)例,并通過它來提供安全管理的各種服務(wù)。

Realm:Realm充當(dāng)了Shiro與應(yīng)用安全數(shù)據(jù)間的“橋梁”或者“連接器”。也就是說,當(dāng)對(duì)用戶執(zhí)行認(rèn)證(登錄)和授權(quán)(訪問控制)驗(yàn)證時(shí),Shiro會(huì)從應(yīng)用配置的Realm中查找用戶及其權(quán)限信息。

從這個(gè)意義上講,Realm實(shí)質(zhì)上是一個(gè)安全相關(guān)的DAO:它封裝了數(shù)據(jù)源的連接細(xì)節(jié),并在需要時(shí)將相關(guān)數(shù)據(jù)提供給Shiro。當(dāng)配置Shiro時(shí),你必須至少指定一個(gè)Realm,用于認(rèn)證和(或)授權(quán)。配置多個(gè)Realm是可以的,但是至少需要一個(gè)。

Shiro內(nèi)置了可以連接大量安全數(shù)據(jù)源(又名目錄)的Realm,如LDAP、關(guān)系數(shù)據(jù)庫(JDBC)、類似INI的文本配置資源以及屬性文件等。如果缺省的Realm不能滿足需求,你還可以插入代表自定義數(shù)據(jù)源的自己的Realm實(shí)現(xiàn)。

Hello Shiro

導(dǎo)入slf4j-api.jar,slf4j-logj12.jar,log4j.jar,shiro-core.jar包

在classpath下創(chuàng)建shiro.ini文件,文件內(nèi)容如下表示用戶名和密碼

[users]

shiro = shiro

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;
import org.junit.Assert;
import org.junit.Test;

public class ShiroTest {

    @Test
    public void test() {
        // 1、獲取SecurityManager工廠,此處使用Ini配置文件初始化SecurityManager
        Factory<SecurityManager> factroy = new IniSecurityManagerFactory("classpath:shiro.ini");

        // 2、得到SecurityManager實(shí)例并綁定給SecurityUtils
        SecurityManager securityManager = factroy.getInstance();
        SecurityUtils.setSecurityManager(securityManager);

        // 3、得到Subject及創(chuàng)建用戶名/密碼身份驗(yàn)證Token(即用戶身份/憑證)
        Subject subject = SecurityUtils.getSubject();
        UsernamePasswordToken token = new UsernamePasswordToken("shiro", "shiro");
        try {
            // 4、登錄,即身份驗(yàn)證
            subject.login(token);
        } catch (AuthenticationException e) {
            // 5、身份驗(yàn)證失敗
            e.printStackTrace();
        }

        Assert.assertEquals(true, subject.isAuthenticated()); //斷言用戶已經(jīng)登錄

        // 6、退出
        subject.logout();
    }
}

1.需要讀取classpath下的shiro.ini配置文件,并通過工廠類創(chuàng)建SecurityManage對(duì)象,最終將其放入SecurityUtils中,方便Shiro框架隨時(shí)獲取

2.通過SecurityUtils獲取Subject(主體)對(duì)象,其實(shí)就是當(dāng)前用戶,只是叫法不同罷了

3.首先使用一個(gè)Username與Password來創(chuàng)建一個(gè)UsernamePasswordToken對(duì)象,然后通過這個(gè)Token對(duì)象調(diào)用Subject的login方法進(jìn)行身份認(rèn)證

4.當(dāng)?shù)卿浭。梢允褂肁uthenticationException來捕獲這個(gè)異常;當(dāng)?shù)卿洺晒梢哉{(diào)用Subject對(duì)象的getPrincipal方法來獲取Username,此時(shí)Shiro已經(jīng)創(chuàng)建了一個(gè)Session

5.最后還是通過Subject對(duì)象的logout來注銷本次Sesson

只需要知道以上幾個(gè)Shiro核心成員的基本用法,Shiro就是你的了

其實(shí),Shiro的調(diào)用流程也不難理解,如下圖

shiro權(quán)限框架

通過Subject調(diào)用SecurityManager,通過SecurityManager調(diào)用Realm,這個(gè)Realm說白了其實(shí)就是提供用戶信息的數(shù)據(jù)源,例如上例子中的shiro.ini就是配置用戶信息的一種Realm方式,在Shiro中叫做IniRealm,除此之外,還提供了其他幾種Realm:有PropertiesRealm、JdbcRealm、JndiLdapRealm、ActiveDirectoryRealm等,當(dāng)然也可以定制Realm來滿足業(yè)務(wù)需求。

在Web開發(fā)中使用Shiro

在web開發(fā)中,還需要導(dǎo)入shiro-web.jar包,然后在web.xml中添加一個(gè)Listener與一個(gè)Filter。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">

    <!-- 添加Shiro監(jiān)聽器 -->
    <listener>
        <listener-class>org.apache.shiro.web.env.EnvironmentLoader-Listener</listener-class>
    </listener>

    <!-- 添加Shiro過濾器 -->
    <filter>
        <filter-name>ShiroFilter</filter-name>
        <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>ShiroFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

實(shí)際上就是通過EnvironmentLoaderListener這個(gè)監(jiān)聽器來初始化SecurityManager,并通過ShiroFilter來完成認(rèn)證認(rèn)證與授權(quán)。

以上就是動(dòng)力節(jié)點(diǎn)小編介紹的"Shiro權(quán)限控制框架",希望對(duì)大家有幫助,想了解更多可查看Shiro視頻教程。動(dòng)力節(jié)點(diǎn)在線學(xué)習(xí)教程,針對(duì)沒有任何Java基礎(chǔ)的讀者學(xué)習(xí),讓你從入門到精通,主要介紹了一些Java基礎(chǔ)的核心知識(shí),讓同學(xué)們更好更方便的學(xué)習(xí)和了解Java編程,感興趣的同學(xué)可以關(guān)注一下。

提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 全黄一级裸片视频免费 | 色视频网站人成免费 | 亚洲一二区视频 | 四虎影院入口 | 在线观看日韩欧美 | 成人欧美一区二区三区 | 欧美不卡精品中文字幕日韩 | 精品推荐 国产 | 亚洲欧美成人中文在线网站 | 国产成 人 综合 亚洲网 | 欧美精品国产日韩综合在线 | 在线综合视频 | 久操视频在线免费观看 | 久久不卡视频 | 国产精品欧美一区二区三区 | 久久性生大片免费观看性 | www.色午夜.com | 日韩精品成人在线 | 六月婷婷久香在线视频 | 99re6在线视频免费精品 | 国产一区中文字幕 | 日韩 亚洲 中文 图片 小说 | 国产成人精品cao在线 | 三级天堂 | 国产成人无精品久久久 | 国产精品永久免费自在线观看 | 婷婷天天| 国产人成精品综合欧美成人 | 久久综合精品国产一区二区三区无 | 日韩国产欧美精品综合二区 | 韩国精品欧美一区二区三区 | 欧美一级人与动毛片免费播放 | 国产午夜在线观看 | 欧美亚洲国产精品久久久久 | 日韩特黄 | 前田香织一区二区中文字幕 | 91精品国产爱久久久久 | 91在线精品老司机免费播放 | 亚洲激情一区 | 国产精品深夜福利免费观看 | 国产精品免费久久久久影院 |