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

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

Shiro權限控制框架

更新時間:2021-07-29 16:47:56 來源:動力節點 瀏覽1148次

Shiro三個核心組件:Subject,SecurityManager和Realms.

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

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

Realm:Realm充當了Shiro與應用安全數據間的“橋梁”或者“連接器”。也就是說,當對用戶執行認證(登錄)和授權(訪問控制)驗證時,Shiro會從應用配置的Realm中查找用戶及其權限信息。

從這個意義上講,Realm實質上是一個安全相關的DAO:它封裝了數據源的連接細節,并在需要時將相關數據提供給Shiro。當配置Shiro時,你必須至少指定一個Realm,用于認證和(或)授權。配置多個Realm是可以的,但是至少需要一個。

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

Hello Shiro

導入slf4j-api.jar,slf4j-logj12.jar,log4j.jar,shiro-core.jar包

在classpath下創建shiro.ini文件,文件內容如下表示用戶名和密碼

[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實例并綁定給SecurityUtils
        SecurityManager securityManager = factroy.getInstance();
        SecurityUtils.setSecurityManager(securityManager);

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

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

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

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

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

3.首先使用一個Username與Password來創建一個UsernamePasswordToken對象,然后通過這個Token對象調用Subject的login方法進行身份認證

4.當登錄失敗,可以使用AuthenticationException來捕獲這個異常;當登錄成功可以調用Subject對象的getPrincipal方法來獲取Username,此時Shiro已經創建了一個Session

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

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

其實,Shiro的調用流程也不難理解,如下圖

shiro權限框架

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

在Web開發中使用Shiro

在web開發中,還需要導入shiro-web.jar包,然后在web.xml中添加一個Listener與一個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監聽器 -->
    <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>

實際上就是通過EnvironmentLoaderListener這個監聽器來初始化SecurityManager,并通過ShiroFilter來完成認證認證與授權。

以上就是動力節點小編介紹的"Shiro權限控制框架",希望對大家有幫助,想了解更多可查看Shiro視頻教程。動力節點在線學習教程,針對沒有任何Java基礎的讀者學習,讓你從入門到精通,主要介紹了一些Java基礎的核心知識,讓同學們更好更方便的學習和了解Java編程,感興趣的同學可以關注一下。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 免费一级a毛片免费观看欧美大片 | 欧美精品日日鲁夜夜 | 欧美日韩视频在线成人 | 久久精品国产亚洲婷婷 | 久久精品国产半推半就 | 天天摸夜夜添狠狠添2018 | 天天伊人 | 婷婷色婷婷 | 综合久久久久久中文字幕 | 九九视频这里只有精品99 | 天堂精品高清1区2区3区 | 久久噜噜噜久久亚洲va久 | 热99re久久精品这里都是免费 | 亚洲一区二区三区一品精 | 网友自拍视频悠悠在线 | 久久亚洲精品永久网站 | 一级毛片片 | 日本亚洲黄色 | 成人免费高清视频 | 看日本真人一一级特黄毛片 | 福利视频免费看 | 国内精品免费久久久久妲己 | 在线观看香蕉免费啪在线观看 | 天天射天天干天天色 | 中文亚洲日韩欧美 | 丝袜三级 | 99精品国产第一福利网站 | 日韩中文字幕免费 | 午夜aaaaaaaaa视频在线 | 香蕉视频日本 | 亚洲爱爱天堂 | 国产精品免费视频播放 | 97在线国产视频 | 2019偷偷狠狠的日日 | 亚洲jizzjizz中国妇女 | 欧美精品专区第1页 | 亚洲狠狠97婷婷综合久久久久 | 免费看一级大片 | 就草草在线观看视频 | 国产欧美亚洲精品 | 免费一级成人毛片 |